人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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%/のようにしております。
カテゴリ関連のプラグインは使用しておりません。

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

●質問者: poporyoumakun
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● rouge_2008
ベストアンサー

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

$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()) :」に対応しているので、この行より前に記述して記事がある場合のみ呼び出した方がいいです。


rouge_2008さんのコメント
「query_posts(?)」の前に次の記述を追加したでしょうか? >|| $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ||<

rouge_2008さんのコメント
「category.php」に記述しているのでしょうか? 質問文で提示したコードをそのままテンプレートに記述してあるのでしょうか? また、このコードより前の記述はどのようになっていますか? あるいは「functions.php」で何か実行していないでしょうか? 通常はページングに関しては問題なく動作するはずです(※別の問題は発生しますが、同一投稿が表示される問題は発生しない)ので、何らかの書き換えが行われているのだと思います。 次のように、デフォルトのメインクエリの引数と、各変数を出力して表示内容を確認してみてください。 >|| echo '<pre>' . $query_string . '</pre>'; echo '<pre>$paged: ' . $paged . '</pre>'; echo '<pre>$page: ' . $page . '</pre>'; echo '<pre>$cat: ' . $cat . '</pre>'; query_posts( 'posts_per_page=10&paged=' . $paged ); ||< ※別の問題の件もありますので、「functions.php」でメインクエリを変更する方法も試してみてください。 ※「別の問題」・・・表示設定の「1ページに表示する最大投稿数」より少ない件数にクエリを変更した場合、設定値により計算されたページ数を超えるページでは投稿が見つからない状態になります。

poporyoumakunさんのコメント
何度もすみません(><;)記述はsingle.phpに記述しております。上記のソースを記述したところ、 paged=2&name=%25E3%2583%2586%25E3%2582%25B9%25E3%2583%2588%25E3%2581%25A0%25E3%2582%2588%25E3%2582%2593&category_name=nature $paged: 2 $page: 1 と表示されました。 ちなみに、元の記述は下記のようにしておりました。 <?php foreach((get_the_category()) as $cat) { $cat_id = $cat->cat_ID ; break ; } $query = 'cat=' . $cat_id. '&showposts=16'; query_posts($query) ; ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div class="relevant_post"> <div id="relevant_post_img_container"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a></div> <h2 class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> </div> <?php endwhile; endif; ?> <?php wp_reset_query(); ?> <div class="nav-below"> <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts('posts_per_page=10&paged=' . $paged); if (have_posts()) : while (have_posts()) : the_post(); ?> <?php endwhile; wp_pagenavi(); endif; ?> <?php wp_reset_query(); ?> <?php wp_reset_query(); ?> やはり自分では難しいようです。

poporyoumakunさんのコメント
スーパーPre記法でもう一度記述させて頂きます! 何度もすみません(><;)記述はsingle.phpに記述しております。上記のソースを記述したところ、 paged=2&name=%25E3%2583%2586%25E3%2582%25B9%25E3%2583%2588%25E3%2581%25A0%25E3%2582%2588%25E3%2582%2593&category_name=nature $paged: 2 $page: 1 と表示されました。 ちなみに、元の記述は下記のようにしておりました。 >|| <?php foreach((get_the_category()) as $cat) { $cat_id = $cat->cat_ID ; break ; } $query = 'cat=' . $cat_id. '&showposts=16'; query_posts($query) ; ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div class="relevant_post"> <div id="relevant_post_img_container"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a></div> <h2 class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> </div> <?php endwhile; endif; ?> <?php wp_reset_query(); ?> <div class="nav-below"> <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts('posts_per_page=10&paged=' . $paged); if (have_posts()) : while (have_posts()) : the_post(); ?> <?php endwhile; wp_pagenavi(); endif; ?> <?php wp_reset_query(); ?> <?php wp_reset_query(); ?> ||<

rouge_2008さんのコメント
無理なカスタマイズをしようとしているようです。 「single.php」は個別投稿ページを表示する為のテンプレートファイルです。 追加変更したループが2つあり、1つ目のループで本来そのページで表示される記事と同一カテゴリーの記事タイトルとリンクを16件表示し、さらに2つ目のループで表示件数のみ10件に変更している(※カテゴリー等はリセットされる)ので、省略した(?)記事タイトルとリンク表示のコードを追加すれば、インデックス(※トップ)ページと同様の記事が10件分表示されると思います。 この2つ目のクエリー内でWP-pagenaviのナビゲーションを表示していますが、2つ目のループの2ページ目を表示したいのでしょうか? やりたい事は「同一カテゴリのページ送りをしたい」という事でしたが、2つ目のループはカテゴリーがリセットされたクエリーになっているので、取得される記事は同一カテゴリーに限定されていません。 また、個別投稿ページですから2ページ目は存在しませんし、デフォルトの状態では「/page/?/」をつけてアクセスしてもページ指定が無効な状態でアクセスした個別投稿ページが表示されます。 ※「&lt;!--nextpage--&gt;」で改ページしている投稿の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」を作成して利用するようにしてください。(自動でアクセスしたカテゴリーを判別して表示するので、クエリーを変更する必要はありません。通常のループの記述で表示されます。)

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

質問者から

はい!記述しております!こちらでは何故か表示されないようです!
何度もすみません(><)


query_posts('posts_per_page=10&paged=' . $paged);
if (have_posts()) :
while (have_posts()) : the_post(); ?>

endwhile;
wp_pagenavi();
endif;
?>


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ