特的カテゴリーの一覧
-
category-aaa.phpに、
<?php wp_get_archives('cat=4&type=yearly'); ?>と記述し、カテゴリーID4に属する
■2016年度
■2017年度
といった年度別のindexを作成し、
年度をクリックすると、その年度の記事を表示したいのですが、
カテゴリーID4以外も含めた、全記事が出てしまいます。年度をクリックしたリンク先は、date.phpを読みにいっており、
以下のように記述しています。<?php if(have_posts()): ?> <?php while(have_posts()): the_post(); ?> <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3> <?php endwhile; ?> <?php endif; ?> <div class="pageNav"><?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?></div> <div class="redBut02"><a href="<?php bloginfo('url'); ?>/results">年度のindexへ戻る</a></div>どのようにすれば、カテゴリーID4のみの記事を表示できるか、ご教授お願いいたします。
-
こんにちは
過去のトピックでレスしたのですが、参照してもらえたでしょうか?
https://ja.wordpress.org/support/topic/特定カテゴリーの年別indexと記事一覧/#post-215234自分なら次のことを試してみます。動かないかもしれませんが。
パーマリンクがデフォルトだとすると、ブラウザのurlのところに
site_url/?cat=4&year=2017とかsite_url/?cat=4&year=2016で呼び出せるのではないかなと。
リンクを作るときにyear=にあたる部分をどう作るかかなと。
記事がある年だけの配列をどうやって作るのかなと。$years=array('2017','2016',記事のある年…);//wordpressの関数が使える? foreach($years as $year){ 'href="site_url/?cat=4&year='.$year.'"//適当なので完成させてください }パーマリンクがデフォルトじゃないとちょっとよくわからない。
WordPress の表示ロジックを理解する – Reloaded –
めんどくさいけど、直接書くとか。
<?php if(表示条件 赤なら?){ ?>//半角全角入り混じってる。 <a href="site_url/?cat=4&year=2017">2017</a> <a href="site_url/?cat=4&year=2016">2016</a> <a href="site_url/?cat=4&year=2015">2015</a> <?php } ?>ishitakaさま
ありがとうございます。
以前の記事も確認させていただいております。ご教授いただいた通りでうまくいったと思ったのですが、
どうやらうまくいっていなかったようでした・・。もう一度確認し、functions.phpへの記述と、
<?php if(have_posts()): ?> <?php while(have_posts()): the_post(); ?> <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3> <?php endwhile; ?> <?php endif; ?>上記を以下に変更することでうまくいきました!
<h3><?php wp_get_archives("type=postbypost&limit=10&format=html&cat=4"); ?></h3>ただ、吐き出されるタグが
<h3> <li><a href='http:・・・'>記事01</a></li> <li><a href='http:・・・'>記事02</a></li> </h3>となってしまうのを、
<h3><a href='http:・・・'>記事01</a></h3> <h3><a href='http:・・・'>記事02</a></h3>とするには良いでしょうか?
oisitさま
ご教授をありがとうございました。
上記の通りで、うまく記事の表示はできたのですが、
吐き出しのタグのところでつまづいております・・・。ishitakaさま
<?php wp_get_archives("type=postbypost&limit=10&format=html&cat=4"); ?>で、カテゴリーID4に属する記事のみが出たのですが、
その年度のものではないものも出てきてしまいました。ご教授いただけますでしょうか。
宜しくお願いいたします。繰り返しになってしまいますが、wp_get_archives にカテゴリー(cat)を指定するオプションはないですよ。
https://wpdocs.osdn.jp/テンプレートタグ/wp_get_archivesishitakaさま
なるほど、わかりました。
Archives for a category のプラグインを使用して試してみているのですが、
こちらでも年度別のindexは表示されますが、
年度をクリックした時に、
http://・・・/2017?cat=4
このようなリンクになり、同じテンプレート(category-aaa.php)を読みにいってしまいます。私は、Archives for a category プラグインというものを知らないので(公式ディレクトリないようですが?)、フォローすることができません。
Archives for a category プラグインの使用を明記したうえで、新たにトピックを立てた方がレスが付きやすいかなと思います。
お役に立てずにごめんなさい。ishitakaさま
ご丁寧に教えていただき、大変感謝しております。
ありがとうございました。Archives for a categoryの件については、新しいトピックにて質問させていただきます。
ちなみに、私が実現したいと思っている
特定カテゴリーの年度別index⇒その年度の一覧⇒個別記事
というのは無理なのでしょうか?特定カテゴリーの年度別index⇒その年度の一覧⇒個別記事
「特定カテゴリーの年度別index」は下記のページが参考になるとおもいます。
http://qiita.com/shuhei/items/c364c0ea129a06e9f71a「その年度の一覧」および「個別記事」はそのままで表示されるとおもいます。
ishitakaさま
functions.phpへ以下を記述
add_filter('getarchives_where', 'custom_archives_where', 10, 2); add_filter('getarchives_join', 'custom_archives_join', 10, 2); function custom_archives_join($x, $r) { global $wpdb; $cat_ID = $r['cat']; if (isset($cat_ID)) { return $x . " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)"; } else { return $x; } } function custom_archives_where($x, $r) { global $wpdb; $cat_ID = $r['cat']; if (isset($cat_ID)) { return $x . " AND $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id IN ($cat_ID)"; } else { $x; } } function wp_get_cat_archives($opts, $cat) { $args = wp_parse_args($opts, array('echo' => '1')); // default echo is 1. $echo = $args['echo'] != '0'; // remember the original echo flag. $args['echo'] = 0; $args['cat'] = $cat; $archives = wp_get_archives(build_query($args)); $archs = explode('</li>', $archives); $links = array(); foreach ($archs as $archive) { $link = preg_replace("/href='([^']+)'/", "href='$1?cat={$cat}'", $archive); array_push($links, $link); } $result = implode('</li>', $links); if ($echo) { echo $result; } else { return $result; } }category-aaa.phpへ以下を記述いたしましたが、
年度をクリックすると、同じcategory-aaa.phpが適用され、
その年度の記事一覧ではなく、年度のindexが表示されてしまいます。<?php $cat_ID = 4; wp_get_cat_archives('type=monthly', $cat_ID); ?>こちらで吐き出されたタグはこのようになっております。
http://・・・/2017/03?cat=4テンプレートが違うのでしょうか?
月別アーカイブ(type=monthly)を指定しているので月別のリストが表示されるとおもいますが・・・。
type=yearly ではないでしょうか。その年度の記事一覧ではなく、年度のindexが表示されてしまいます。
「記事一覧」とは、カテゴリーアーカイブインデックスページ(category-aaa.php のメインクエリ)のことでしょうか?
当方でも検証してみましたが、問題なく表示されました。「年度のindex」とは、wp_get_cat_archives の表示のことでしょうか?
category-aaa.php に記述していてる場合(表示条件などを指定していなければ)は、そのまま表示されるとおもいます。oisit さんが紹介されているように「テンプレート階層」について、もう一度参照するといいとおもいます。
ishitakaさま
ご丁寧な回答をありがとうございます。
type=yearly でした・・。失礼しました。
申し訳ありません、ishitakaさまなら、どのようなテンプレート階層にされるか
教えていただいてもいいでしょうか?category-aaa.phpで、「年度別index」wp_get_cat_archivesの表示
date.phpで、上記で吐き出された年度毎の記事一覧を表示
させたいと思っておりました。投稿側では、タイトルと本文を入力し、カテゴリーaaaを選択。
この投稿された記事の年度を拾って、年度別に振り分けたいです。何卒、宜しくお願いいたします。
どのようなテンプレート階層にされるか教えていただいてもいいでしょうか?
どのようなページ構成をお考えなのか把握できていないので提案できません。どのようなページ構成をお考えですか?
date.phpで、上記で吐き出された年度毎の記事一覧を表示
date.php は、通常は日付別アーカイブインデックスページ用なので、年度別のカテゴリーアーカイブは、category-{slug}.php でいいとおもいます。
条件が違うからといって異なるテンプレートが必要ということはないと思います。
スレ主さんがしたいことが、
特定カテゴリーの年度別index
カテゴリー4の一覧
その年度の一覧
カテゴリー4と2017年の一覧
と仮定すれば、archive.phpでどちらも、それぞれの条件に絞り込まれた記事の一覧は表示が可能だと思う。この場合、特に何もカスタマイズは必要ないように思います。テンプレートは表示担当で、記事の絞り込みはメインループがしてくれるので、urlにクエリー文字列でcat、year等のパラメータを指定する。パラメータによって使われるテンプレートが決まるので同じテンプレートが指定される場合もある。
次に年度ごとのナビ2017、2016、2015というリンクが必要なら、カテゴリー4の一覧の場合という条件が出てくるので、専用のcategory-4.phpか、archive.phpかcategory.phpにif(カテゴリーが4なら)
で年度のナビを表示でいいのではないかと。まとめるのが下手ですいません。
あと仮定が違っていれば無視してください。
トピック「特的カテゴリーの一覧」には新たに返信することはできません。