カテゴリー毎に作成(表示)した記事のページング
-
今回、初めてWordPressでページを制作するに当たりまして、カテゴリーページのページングをしたいと思ったのですが、ちょっとどうやって行っていいかわからず困っております。
<具体的には太字で書かれている部分が、ページングを実装したい部分です>
・親カテゴリー1の一覧ページ
⇒親カテゴリー1の下
・子カテゴリー:1-1の一覧ページ
・子カテゴリー:1-2の一覧ページ
・子カテゴリー:1-3の一覧ページ
・子カテゴリー:1-4の一覧ページ
・子カテゴリー:1-5の一覧ページ・親カテゴリー2の一覧ページ
⇒親カテゴリー2の下
・子カテゴリー:2-1の一覧ページ
・子カテゴリー:2-2の一覧ページ
・子カテゴリー:2-3の一覧ページ・親カテゴリー3の一覧ページ(サイトのお知らせ)
親カテゴリーで分けた一覧ページ と 親カテゴリーに所属する子カテゴリーで分けた一覧ページそれぞれにページングを付与することは可能でしょうか?
設計が難しいのでプラグインがもしかしたらうまくいかないかもという不安があって今回投稿しました。
補足要求があれば、そのつど対応致しますのでよろしくお願い致します。
(ここではない某場所で質問したら、冷たく突っ返されてしまったのでちょっと怖いですが・・・)
-
ありがとうございます。
query_postの問題含め、in_categoryをis_categoryに変換しても、なにも進んでないんです。
64, 179, 198行目の修正箇所はどういったところでしょうか?それとも今、WordPressのエディタ上のテンプレートをもう一度お送りしなおしたほうがよういでしょうか?
お忙しいところ申し訳ありませんが宜しくお願い致します。
64, 179, 198行目の修正箇所はどういったところでしょうか?
fumiyasacさんの提示しているコードをテキストエディタにコピペしてみるだけでも「明らかに」おかしいですよ。
179とか<dd>ID, '外部ページURL(カテゴリ:お知らせ・最新情報)',true); ?>" target="_blank"><?php the_title(); ?></dd>
何かが消えていてphpタグの入れ子とかおかしいですよね。コピペミスなのかどうか分かりませんが、これで動くとは思えません。
えっと、すみません。行番号がずれていたかもしれません。
<div id="plistBoxPages"> <p class="magl10 magt10">">TOP >> <?php if(in_category('4')): ?>/works/">Works - 制作実績紹介 >> 映画 <?php endif; ?><?php if(in_category('5')): ?>Information - 出演・受賞などのお知らせ一覧<?php endif; ?><?php if(in_category('6')): ?>/works/">Works - 制作実績紹介 >> TV <?php endif; ?><?php if(in_category('7')): ?>/works/">Works - 制作実績紹介 >> 出演 <?php endif; ?><?php if(in_category('3')): ?>Media - メディア/掲載等 <?php endif; ?><?php if(in_category('8')): ?>/works/">Works - 制作実績紹介 >> 企画・プロデュース <?php endif; ?><?php if(in_category('9')): ?>/works/">Works - 制作実績紹介 >> WEB-CF <?php endif; ?><?php if(in_category('13')): ?>/works/">Works - 制作実績紹介 >> イベント <?php endif; ?><?php if(in_category('23')): ?>/works/">Works - 制作実績紹介 >> 講演・登壇 <?php endif; ?></p> </div><!--//mainVisualPages end-->
という箇所と
<?php if ( get_post_meta($post->ID, '外部ページURL(カテゴリ:お知らせ・最新情報)') ) : ?> <dd>ID, '外部ページURL(カテゴリ:お知らせ・最新情報)',true); ?>" target="_blank"><?php the_title(); ?></dd> <?php endif; ?>
という箇所と
<h5 class="magt10"><span class="tag1-head">映画</span> "><?php the_title(); ?></h5> <div class="magt10 magb5"><?php the_content(); ?></div> </div>
という箇所になります。いずれも特定の箇所でマークアップやコードの記述が不適切です。
====
ちなみに私の環境では、コードを削って最小限の記述でテストしたところ、
どのアーカイブページでも正しく動作しているように見えます。
あとは、カテゴリー別ページとそうでないページの処理をそもそも分ける必要があります。
私のテストコードは以下の通りです。 is_category() に渡すカテゴリーIDは適宜変更してくださいね。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" /> <title><?php bloginfo('name'); ?>|<?php if( is_category(1) ): ?>Media - メディア/掲載等<?php endif; ?></title> </head> <body> <?php if ( is_category() ) : ?> <?php if ( is_category(1) ): ?> <?php if(have_posts()): while(have_posts()): the_post(); ?> <dl class="newsBlock magt10"> <dt><?php the_time('Y.m.d') ?></dt> <?php if ( get_post_meta($post->ID, '外部ページURL(カテゴリ:お知らせ・最新情報)') ) : ?> <dd><a href="<?php echo apply_filters('the_permalink', get_post_meta($post->ID, '外部ページURL(カテゴリ:お知らせ・最新情報)',true) ); ?>" target="_blank"><?php the_title(); ?></a></dd> <?php else: ?> <dd><?php the_title(); ?></dd> <?php endif; ?> </dl> <?php endwhile; endif; ?> <?php if ( function_exists('wp_pagenavi') ) wp_pagenavi(); ?> <?php endif; ?> <?php else: // カテゴリー別ページ以外の処理 ?> <p>これはカテゴリー別ページではありません。</p> <?php endif; ?> </body> </html>
# このテンプレートを適用した状態で、カテゴリー別アーカイブのページのURLに直接アクセスしてみてください。
shokun0803様
ご指摘ありがとうございました。どうやら、コピペの際にタグなどが消えてしまったようでした。
こちらの件に関しては大変申し訳なく思っております。
あわてまくって、冷静になれない点、反省します。
あ。 query_posts() の件については、使っていなければ忘れてくださいね。ひょっとして、というだけのことでした。まずはHTMLのマークアップや PHP コードの記述ミス(があれば)ひとつずつ潰していってください。
上記のテストコード、使いにくくて恐縮ですが、fumiyasac さんの環境で基本的に動作するかどうかの確認です。動くかどうかの報告お願いします。
それから
私の解釈では、カテゴリー別アーカイブのテンプレートの中身をカテゴリー毎に分けたいと思いテンプレートを作成したがうまくいかず、さらにページングも機能していない、という問題なのですが正しいでしょうか?
これについては合ってますか?;; もし勘違いとだとしたら、テスト自体意味がないので、もう一度、実現したいことを確認する必要があります。fumiyasac さんの説明からは、ひょっとして、トップページにカテゴリー別の記事一覧を並べて、それぞれにページャを付けたいという意味なのかな、という可能性も考えられ……。ただ、toppage.php が存在するので、それは違うような気もしつつ……。
mizube様
サンプルコードを提示して頂きまして、本当にありがとうございます。
少し希望の光が見えてきました!
頂きましたコードをindex.phpにコピーして入れてみましたが、ページング部分をクリックすると「これはカテゴリー別ページではありません。」が表示されてしまいました。
もしかして、index.phpに書いているからかなと分析している感じですが…もしかして今回頂いたものは、archive.phpに書かないといけないものだったのでしょうか?
補足になるんですが、パーマリンク設定は以下のようになっています。
(カスタムのもの)/%category%/%post_id%/こちらも冷静になってもうすこし触ってみます!
toppage.phpに関しては、以下のような動きです。
Webサイト全体のTOPです。特定カテゴリーの記事を5件表示するようにしてあります。カテゴリに属する記事の一覧はindex.phpを使用しています。(カテゴリー別アーカイブのテンプレートは用意していません。作り方がわからなかったもので・・・)
頂きましたコードをindex.phpにコピーして入れてみましたが、ページング部分をクリックすると「これはカテゴリー別ページではありません。」が表示されてしまいました。
それは、確かにおかしいですね。動作確認したページはカテゴリーページなんですよね? トップページにあるページャのリンクをクリックしたらそうなった、というケースの場合は、トップページのテンプレートに問題があります(URLが間違っている、toppage.php の各ページャ部分に WP-PageNavi をそのまま設置しているなど)。
====
もしかして、index.phpに書いているからかなと分析している感じですが…もしかして今回頂いたものは、archive.phpに書かないといけないものだったのでしょうか?
いいえ。 index.php でもよいのですが、例えば日付別、タグ別などのページでも同じ処理をしてしまうので、カテゴリー専用の処理を index.php や archive.php などに記述する場合は is_category() で条件分岐させます。タグ別ページの場合は is_tag() 、日付別ページの場合は is_date() などです。
そのように色んな場合分けがテンプレート内で入り組んで複雑になると途中で把握しきれなくなることがあります。そこで、そういう場合、私はテンプレートを別に作成します。カテゴリーページ用のテンプレートのファイル名は category.php です。
カテゴリーページのテンプレートは、 category.php があれば category.php なければ arhive.php それもなければ index.php という感じで適用するテンプレートを探します。これが WordPress にてテンプレート階層と呼ばれるものです。
このテンプレートの適用ルールについての詳細は、 テンプレート階層 – WordPress Codex 日本語版を見れば分かり易いかと思います。
#19時より22時まで回答できません。お時間はよろしいですか?
mizube様
時間帯の件了解しました。もし、ブログの中を見たいというご要望でもご対応いたします。
また何か分かりましたらご連絡いたします。
mizube様
追記になります。
もしかするとhtaccessの問題なのかも?とも思いました。
ページ送りをクリックすると、以下のようなURLになるからかな?とふと思いました。
http://www.example.name/category/categoryname/page/2/それで、挙動的にはなんら問題がないのにはじかれるのかなと思いました。
すいません。ちょっと思い当たるフシがあったので補足しました。
fumiyasac さん
復帰しました。遅くなってしまい申し訳ありません。
.htaccess の設定が正しくできていれば、 カテゴリーページの URL は http://example.name/category/categoryname/ のようになっているはずで、 2ページ目の URL もそれで正しいはずです。うーん。ちなみに Default テーマを適用した場合、2ページ目以降は正しく表示されますか?
mizube様
こちらこそすいませんでした。
>Default テーマを適用した場合、2ページ目以降は正しく表示されますか?
変更していたところ、正しく動いていましたので、プログラムは正しかったです。しかし、階層がおかしかった(categoryがないままページングを行おうとしていたので、404になっていた。categoryを消そうとしてプラグインを入れましたが、今度は別の部分のページングに問題が発生したのでcategoryは表示したままにしました。)為にプログラムは正しいのにうまくページングがされていなかったという結論でした。
ここまで丁寧に付き合って下さいまして、本当に感謝しております。
shokun0803様、LVP8様も、私のこのような下らなく、また稚拙極まる質問にお答えいただいて本当に感謝しております。
自分のスキルのなさに歯がゆさを覚えると同時に、ご回答下さいました皆様には数々の非礼をお詫び申し上げます。
この一件を教訓に、これからも少しずつではありますが、精進していきますのでよろしくお願い申し上げます。
fumiyasac さん
問題はパーマリンク構造と URL の不一致ということで、一応解決されたわけですね。
私の回答は的外れなものばかりだったようですが、多少はお役に立てたようで何よりです。
お疲れ様でした。しかし、いまだに何が原因だったのか???な感じです。
使用されているプラグインでパーマリンク構造を変更するものはありませんよね。
自作のコードが WordPress のコアの機能と衝突する問題があった、ということでしょうか。
お時間のあるときに、今回の原因を分かり易くまとめて頂けると有り難いです。ほとんど自己解決という形でしたが、一旦このトピックを解決済みにしておいてください。
- トピック「カテゴリー毎に作成(表示)した記事のページング」には新たに返信することはできません。