ちょいとつまづいたんでメモがてら調べた事をまとめ。
- archive.phpをテンプレートに固定ページを作成。
- 固定ページには「日付」と「記事タイトル(リンク付)」を20件表示。
- そしてWP-Naviなどのプラグインを使わずにページネーションを行う。
というのを実装すべく色々と調べながらせっせと作ってました。
参考にしたのは以下のサイト。
【WordPress】全記事リストを投稿日と一緒に出力する
http://www.ep-melody.com/2011/11/wp-allentry_output/
WordPress:プラグインを使わずにページネーションを実装する方法
http://www.nxworld.net/wordpress/wp-no-plugin-pagination.html
この2つでやりたい事は完全にできるだろうと思ってたんですけども
このまま使うと以下の問題が発生しよりました。
- ページ送りをした際のURL(page/2/)にアクセスしても表示は変わらず。
- ページネーションの設置タグ部分でエラーを吐く。
まずはページ送り部分の問題を解決すべく色々と調べる。
そしてこの記事を発見。
諦めないで…!WordPressでページ送りがうまく行かない時の3つの対処法+究極奥義
http://webimemo.com/wordpress/1813
ここに書かれている「自分のページ番号がわからなくなっちゃってるのかも?」が
今回の症状に当てはまるのではないのかと推測。
なので「【WordPress】全記事リストを投稿日と一緒に出力する」の
コードを以下の様に自分なりにarchive.phpに書いてみました。
<dl id="archive"> <?php query_posts('showposts=20&paged='.$paged); ?> <?php if (have_posts()):while(have_posts()):the_post(); ?> <dt><?php the_time(__('Y/m/d')); ?> </dt> <dd><a href="<?php the_permalink(); ?>"><?php the_title_attribute(); ?></a></dd> <?php endwhile; endif; ?> </dl>
リスト内のループを日付と記事タイトルの定義リストに変更、
そしてphp_the_timeの書式もマルチランゲージ対応の為、日付書式を __() で括った。
これで直接/page/2などにアクセスしてもちゃんと次ページが表示できました。
ループ内に表示させる記事数はshowpost=20の数字で調整できます。
さて、次はページネーションが原因で発生したエラーの修正。
エラーは「Notice: Undefined variable: additional_loop」と
「Notice:Trying to get property of non-object」の2つが発生しているので
なんぞ変数関係がマズイんだろうな、と原因を探る。
紹介元の海外サイトを見てみると以下の記述がありました。
Finally, call the function in your theme (typically near the bottom of index.php or loop.php where it says “Older posts” or “Older entries”):
うーむ、archive.phpに書いてるからエラー出てるわけでもなさそうだけども
「定義されてない変数を参照している」って事なんで
functions.phpに足す側に全く定義されてない$additional_loopが原因なんだろうな、と
総ページ数の取得をwp_queryに変更して、設置タグを以下に改変。
<?php if (function_exists("pagination")) { pagination($wp_query->max_num_pages); } ?>
これでエラーも消えて無事に動くようになりました。
固定ページでのページ送りがうまくいかなくて、もう何日も悩んでいましたが、
こちらの記事を参考にさせて頂いて、うまく動かすことができました。
ずっと悩んでいたので、涙が出るほど嬉しかったです(笑)
ありがとうございました^^
>りか様
はじめまして!閲覧、そして書き込みありがとうございます。
記事がお役に立てて何よりです。
プラグイン使えば簡単に解決しそうなものですが、
この記事を書いた時、多分「使わないでくれたまえ」という指令が出てたのだと思います(笑)
恐らく今となっては「なぜ使わないのか」と逆に問い詰めそうな気がしますけどw