ページ送りのプラグインでwp-page.naviを使用しています。
該当サイトはhttp://dca-labo.info/demo8です。
トップページのページ送りのリンクがうまく張られていません。
カテゴリーページ、アーカイブページに関しては問題なくページ送りのリンクが張られています。
追加したスクリプトは下記です。
http://dca-labo.info/demo8/testimg/work.html
右クリックで確認お願いします。
HTMLのコメントアウトをしている部分で、「get_posts()」で取得した投稿情報を変数「$posts」に代入しているのが原因です。
(※HTMLソースを表示してみると分かりますが、HTMLでコメントアウトしていても、PHPは実行されています。もし必要が無い場合は、PHPコードにはPHPでコメントアウトするようにするといいです。)
(※原因は上記の通りで、WP-PageNaviのリンクは正しく出力されています。WP-PageNaviを使用していないデフォルトの状態でも、2ページ目以降は正しく表示されません。)
・WordPress ループ&クエリーのモヤモヤを解消しよう!
http://wpxtreme.jp/understanding-wordpress-loops-and-queries
グローバル変数の扱いを理解しよう
複数ループは不安定、危険などと言われる原因は、ループ&クエリーでのグローバル変数の扱いが十分に理解されていないことにあります。
以下は、ループ&クエリーに関係のある主なグローバル変数です。$wp_the_query ..... WP_Query オブジェクト。URL のクエリーバックアップ用。 $wp_query ......... WP_Query オブジェクト。カレントのクエリー。 $posts ............ クエリーを実行して取得した記事オブジェクトの配列。 $post ............. カレントの記事オブジェクト。そして、これらのグローバル変数を上書きする関数は以下の通り。
query_posts() ........................ $wp_query を上書き。 the_post(), WP_Query::the_post() ..... $post を上書き。テンプレートファイル内では $wp_query, $posts, $post はグローバル変数として宣言されているので、これらも何らかの値を代入すれば上書きされます。
さらに、上書きされたグローバル変数を復元する関数があります。wp_reset_query() ........ $wp_query を $wp_the_query, $post を $wp_query->post で復元。 wp_reset_postdata() ..... $post を $wp_query->post で復元。
get_posts()
サンプルコード(略)
$posts = と書かないのは、$posts を復元する関数が用意されていないからです。他で使用されるフシが無く、$GLOBALS['posts'] = & $wp_query->posts;で復元すれば良さそうですが、余計なことはしない方が得策です。また、グローバル変数の $post を使用せず $my_post のようにも書けますが、the_title() などのテンプレートタグはグローバル $post 専用のため、echo get_the_title( $my_post ) のように書く必要があります。
※上記に関連部分だけを一部抜粋しましたが、WordPressのループがとても分かりやすく説明されていますので、参考記事をすべて確認してみてください。
今回のコードをPHPでコメントアウトしたり削除しないで使用する場合は、修正する箇所は次の2行になります。(※クエリー発行時に代入する変数とループで使用する変数の変更)
※ここでは「$newposts」としていますが、「$posts」以外でしたら何でも大丈夫です。(「$posts」は上記記事で説明されている通り、メインクエリーで使用するグローバル変数で、復元の為の関数が用意されていないので使用しません。)
<?php $newposts = get_posts('numberposts=5&order=desc'); foreach($newposts as $post): ?>
※また、「新着情報」なので、おそらくトップページだけに表示したいのではないですか?
次のようにしてみてください。
<!-- 条件分岐でトップページ(2ページ目以降除く) の場合のみ処理を実行 --> <?php if( ( is_home() || is_front_page() ) && $paged < 2 ) : ?><!-- この行を追加 --> <h3 class="post_title">新着情報</h3> <dl class="feed"> <?php $newposts = get_posts('numberposts=5&order=desc'); foreach($newposts as $post): ?> <dt> <span class="day"> <?php echo date("Y年m月d日", strtotime($post->post_date)); ?> </span></dt> <dd> <a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"> <?php the_title(); ?> </a> </dd> <?php endforeach; ?> </dl> <?php endif; ?><!-- この行を追加 -->
※もしコメントアウトする場合で、PHPのコメントアウトの方法を忘れた場合は、以前の質問【wordpress3.5に関して質問です。固定ページのコメント欄を非表示にしたいと思っています。】への回答を参考にしてください。
いつも丁寧なご回答ありがとうございます。お察しの通り、PHPのコメントアウトの方法は正直な話混同していたかと思います。
2013/03/27 14:37:14