WordPress プラグインWP-pagenavを使用して、同一カテゴリのページ送りをしたいのですが、2ページ目以降も同じ内容が表示されてしまいます。どのように記述すれば良いか、さっぱり分からず、1ヶ月が経ってしまいました。どなたかお分かりになる方教えて頂けないでしょうか!?どうか宜しくお願い致します。

下記コードです。

<?php query_posts('posts_per_page=10&paged='.$paged);
if (have_posts()) :
while (have_posts()) : the_post(); ?>
<?php endwhile; endif; ?>
<?php wp_pagenavi(); ?>
<?php wp_reset_query(); ?>

ちなみにパーマリンクの設定は、/%category%/%postname%/のようにしております。
カテゴリ関連のプラグインは使用しておりません。

どなたか宜しくお願い致します。

回答の条件
  • 1人50回まで
  • 登録:
  • 終了:2013/11/12 09:35:03

ベストアンサー

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

クエリを発行する前に、現在のページを取得して変数にセットしているでしょうか?

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

query_posts('posts_per_page=10&paged=' . $paged); 

http://codex.wordpress.org/Pagination#Adding_the_.22paged.22_parameter_to_a_query


※メインクエリ変更の目的が、カテゴリアーカイブでの表示件数変更だけなのでしたら、「pre_get_posts」を使って次のようにしてもいいと思います。(※「query_posts()」は使用しません。)

・「functions.php」

function category_archive_request( $query ) {
    if ( $query->is_category() && $query->is_main_query() ) {
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        $query->set( 'posts_per_page', '10' );
        $query->set( 'paged', $paged );
    }
}
add_action( 'pre_get_posts', 'category_archive_request' );

http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts


【追記】

今回の件とは関係ありませんが、「endwhile;」と「endif;」の間に記述した方がいいと思います。

<?php
    endwhile;
    wp_pagenavi();
endif;
?>

※この「endif;」は「if (have_posts()) :」に対応しているので、この行より前に記述して記事がある場合のみ呼び出した方がいいです。

他4件のコメントを見る
id:rouge_2008

無理なカスタマイズをしようとしているようです。
「single.php」は個別投稿ページを表示する為のテンプレートファイルです。
追加変更したループが2つあり、1つ目のループで本来そのページで表示される記事と同一カテゴリーの記事タイトルとリンクを16件表示し、さらに2つ目のループで表示件数のみ10件に変更している(※カテゴリー等はリセットされる)ので、省略した(?)記事タイトルとリンク表示のコードを追加すれば、インデックス(※トップ)ページと同様の記事が10件分表示されると思います。
この2つ目のクエリー内でWP-pagenaviのナビゲーションを表示していますが、2つ目のループの2ページ目を表示したいのでしょうか?
やりたい事は「同一カテゴリのページ送りをしたい」という事でしたが、2つ目のループはカテゴリーがリセットされたクエリーになっているので、取得される記事は同一カテゴリーに限定されていません。
また、個別投稿ページですから2ページ目は存在しませんし、デフォルトの状態では「/page/?/」をつけてアクセスしてもページ指定が無効な状態でアクセスした個別投稿ページが表示されます。
※「<!--nextpage-->」で改ページしている投稿の2ページ目以降でページナビゲーションのリンクをクリックした場合、URLはそのままで「/?(※ページ分割のページ指定)/page/??/」がついたままとなりますが、投稿が見つからない状態になります。
かなりカスタマイズすれば可能なのかもしれませんが、デフォルトで上記のような状態ですので、別の部分に不具合が発生する可能性もありますし、現状でこのようなカスタマイズを行っている(または知っている)人は少ないのではないかと思います。
表示件数以上の関連記事を紹介したい場合は、WordPressにはデフォルトでカテゴリーアーカイブが用意されていますので、カテゴリーアーカイブへのリンクを表示するだけにしてはいかがでしょう?
「wp_pagenavi();」の代わりに次のコードを記入すれば、カテゴリーアーカイブへのリンクが表示されます。(2つ目のクエリー変更とループの記述は必要ないように思いますが、何を表示する為に追加したのでしょう?)

// $cat_idは前の方でカテゴリー取得時に代入した物を使いまわします。
<?php $category_link = get_category_link( $cat_id ); ?>
<!-- ※リンクテキストは任意で変更してください。※ -->
<a href="<?php echo $category_link; ?>">関連記事をもっと見る</a>

・get_category_link
http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_category_link

※カテゴリーアーカイブは「category.php」で表示されます。
「category.php」がない場合は「index.php」を利用して表示しますが、インデックス(※トップ)ページと違う表示にしたい場合は、「category.php」を作成して利用するようにしてください。(自動でアクセスしたカテゴリーを判別して表示するので、クエリーを変更する必要はありません。通常のループの記述で表示されます。)

2013/11/19 22:46:04
id:poporyoumakun

rouge_2008様、教えて下さった通りcategory.phpに表示するように致しました!おかげさまで無事に設置する事ができました。丁寧に教えて下さり、本当に本当にありがとうございました!

2013/11/22 08:31:04

その他の回答0件)

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351ここでベストアンサー

クエリを発行する前に、現在のページを取得して変数にセットしているでしょうか?

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

query_posts('posts_per_page=10&paged=' . $paged); 

http://codex.wordpress.org/Pagination#Adding_the_.22paged.22_parameter_to_a_query


※メインクエリ変更の目的が、カテゴリアーカイブでの表示件数変更だけなのでしたら、「pre_get_posts」を使って次のようにしてもいいと思います。(※「query_posts()」は使用しません。)

・「functions.php」

function category_archive_request( $query ) {
    if ( $query->is_category() && $query->is_main_query() ) {
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        $query->set( 'posts_per_page', '10' );
        $query->set( 'paged', $paged );
    }
}
add_action( 'pre_get_posts', 'category_archive_request' );

http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts


【追記】

今回の件とは関係ありませんが、「endwhile;」と「endif;」の間に記述した方がいいと思います。

<?php
    endwhile;
    wp_pagenavi();
endif;
?>

※この「endif;」は「if (have_posts()) :」に対応しているので、この行より前に記述して記事がある場合のみ呼び出した方がいいです。

他4件のコメントを見る
id:rouge_2008

無理なカスタマイズをしようとしているようです。
「single.php」は個別投稿ページを表示する為のテンプレートファイルです。
追加変更したループが2つあり、1つ目のループで本来そのページで表示される記事と同一カテゴリーの記事タイトルとリンクを16件表示し、さらに2つ目のループで表示件数のみ10件に変更している(※カテゴリー等はリセットされる)ので、省略した(?)記事タイトルとリンク表示のコードを追加すれば、インデックス(※トップ)ページと同様の記事が10件分表示されると思います。
この2つ目のクエリー内でWP-pagenaviのナビゲーションを表示していますが、2つ目のループの2ページ目を表示したいのでしょうか?
やりたい事は「同一カテゴリのページ送りをしたい」という事でしたが、2つ目のループはカテゴリーがリセットされたクエリーになっているので、取得される記事は同一カテゴリーに限定されていません。
また、個別投稿ページですから2ページ目は存在しませんし、デフォルトの状態では「/page/?/」をつけてアクセスしてもページ指定が無効な状態でアクセスした個別投稿ページが表示されます。
※「<!--nextpage-->」で改ページしている投稿の2ページ目以降でページナビゲーションのリンクをクリックした場合、URLはそのままで「/?(※ページ分割のページ指定)/page/??/」がついたままとなりますが、投稿が見つからない状態になります。
かなりカスタマイズすれば可能なのかもしれませんが、デフォルトで上記のような状態ですので、別の部分に不具合が発生する可能性もありますし、現状でこのようなカスタマイズを行っている(または知っている)人は少ないのではないかと思います。
表示件数以上の関連記事を紹介したい場合は、WordPressにはデフォルトでカテゴリーアーカイブが用意されていますので、カテゴリーアーカイブへのリンクを表示するだけにしてはいかがでしょう?
「wp_pagenavi();」の代わりに次のコードを記入すれば、カテゴリーアーカイブへのリンクが表示されます。(2つ目のクエリー変更とループの記述は必要ないように思いますが、何を表示する為に追加したのでしょう?)

// $cat_idは前の方でカテゴリー取得時に代入した物を使いまわします。
<?php $category_link = get_category_link( $cat_id ); ?>
<!-- ※リンクテキストは任意で変更してください。※ -->
<a href="<?php echo $category_link; ?>">関連記事をもっと見る</a>

・get_category_link
http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_category_link

※カテゴリーアーカイブは「category.php」で表示されます。
「category.php」がない場合は「index.php」を利用して表示しますが、インデックス(※トップ)ページと違う表示にしたい場合は、「category.php」を作成して利用するようにしてください。(自動でアクセスしたカテゴリーを判別して表示するので、クエリーを変更する必要はありません。通常のループの記述で表示されます。)

2013/11/19 22:46:04
id:poporyoumakun

rouge_2008様、教えて下さった通りcategory.phpに表示するように致しました!おかげさまで無事に設置する事ができました。丁寧に教えて下さり、本当に本当にありがとうございました!

2013/11/22 08:31:04
id:poporyoumakun

はい!記述しております!こちらでは何故か表示されないようです!

何度もすみません(><)

query_posts('posts_per_page=10&paged=' . $paged);

if (have_posts()) :

while (have_posts()) : the_post(); ?>

endwhile;

wp_pagenavi();

endif;

?>

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません