サポート » 使い方全般 » 特的カテゴリーの一覧

  • 解決済 sarasarari

    (@sarasarari)


    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のみの記事を表示できるか、ご教授お願いいたします。

15件の返信を表示中 - 1 - 15件目 (全16件中)
  • こんにちは

    過去のトピックでレスしたのですが、参照してもらえたでしょうか?
    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 } ?>
    トピック投稿者 sarasarari

    (@sarasarari)

    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>

    とするには良いでしょうか?

    トピック投稿者 sarasarari

    (@sarasarari)

    oisitさま

    ご教授をありがとうございました。

    上記の通りで、うまく記事の表示はできたのですが、
    吐き出しのタグのところでつまづいております・・・。

    トピック投稿者 sarasarari

    (@sarasarari)

    ishitakaさま

    <?php wp_get_archives("type=postbypost&limit=10&format=html&cat=4"); ?>

    で、カテゴリーID4に属する記事のみが出たのですが、
    その年度のものではないものも出てきてしまいました。

    ご教授いただけますでしょうか。
    宜しくお願いいたします。

    繰り返しになってしまいますが、wp_get_archives にカテゴリー(cat)を指定するオプションはないですよ。
    https://wpdocs.osdn.jp/テンプレートタグ/wp_get_archives

    トピック投稿者 sarasarari

    (@sarasarari)

    ishitakaさま

    なるほど、わかりました。

    Archives for a category のプラグインを使用して試してみているのですが、
    こちらでも年度別のindexは表示されますが、
    年度をクリックした時に、
    http://・・・/2017?cat=4
    このようなリンクになり、同じテンプレート(category-aaa.php)を読みにいってしまいます。

    私は、Archives for a category プラグインというものを知らないので(公式ディレクトリないようですが?)、フォローすることができません。
    Archives for a category プラグインの使用を明記したうえで、新たにトピックを立てた方がレスが付きやすいかなと思います。
    お役に立てずにごめんなさい。

    トピック投稿者 sarasarari

    (@sarasarari)

    ishitakaさま

    ご丁寧に教えていただき、大変感謝しております。
    ありがとうございました。

    Archives for a categoryの件については、新しいトピックにて質問させていただきます。

    ちなみに、私が実現したいと思っている

    特定カテゴリーの年度別index⇒その年度の一覧⇒個別記事
    というのは無理なのでしょうか?

    特定カテゴリーの年度別index⇒その年度の一覧⇒個別記事

    「特定カテゴリーの年度別index」は下記のページが参考になるとおもいます。
    http://qiita.com/shuhei/items/c364c0ea129a06e9f71a

    「その年度の一覧」および「個別記事」はそのままで表示されるとおもいます。

    トピック投稿者 sarasarari

    (@sarasarari)

    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 さんが紹介されているように「テンプレート階層」について、もう一度参照するといいとおもいます。

    トピック投稿者 sarasarari

    (@sarasarari)

    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なら)
    で年度のナビを表示でいいのではないかと。

    まとめるのが下手ですいません。
    あと仮定が違っていれば無視してください。

    • この返信は5年、 6ヶ月前にoisitが編集しました。
    • この返信は5年、 6ヶ月前にoisitが編集しました。
    • この返信は5年、 6ヶ月前にoisitが編集しました。
15件の返信を表示中 - 1 - 15件目 (全16件中)
  • トピック「特的カテゴリーの一覧」には新たに返信することはできません。