サポート » 使い方全般 » カスタム投稿タイプの子カテゴリアーカイブの表示

  • yuura

    (@yuura)


    [ 使用しているwordpressのバージョン ]
    ・wp 4.4.4

    以前に同タイトルで質問があったようなのですが、同じ問題で悩んでいます。
    カスタム投稿タイプの子カテゴリアーカイブの表示
    タクソノミーの階層構造内 “子”に属している記事の表示

    [親]termA
      -[子] term
      -[子] term
      -[子] term

    [親]termB
      -[子] term
      -[子] term
      -[子] term

    カスタム投稿一覧→archives-$posttype.php
    タクソノミー一覧→taxonomy-$taxonomy.php

    上記まではできているのですが、子タームの一覧を表示させようとすると、index.phpが読み込まれてしまいます。

    まず、カスタム投稿タイプの子カテゴリアーカイブの表示の最後にあるコードをfunctions.phpに書いてみましたが、こちらはcategory用なので、

    $category = get_category( $category->parent );

    のget_categoryをget_termに変えてみたり試行錯誤をしたのですが、力及ばず…。

    別の方法として、タクソノミーアーカイブに何とかしてarchive-{post_type}.phpを適用できる?こちらのページを参考に、taxonomy.phpに

    <?php
    	$tax = get_query_var('taxonomy'); //今見てるアーカイブページのタクソノミー名を取得
    	$getPostType = get_taxonomy( $tax );
    	$postType = $getPostType->object_type[0]; //タクソノミーに紐付いている投稿タイプのスラッグを取得
    	if ( $postType == 'カスタム投稿タイプ' ) {
    		get_template_part( 'taxonomy', 'タクソノミー' );
    	} else {
    		get_template_part( 'index' );
    	}
    ?>

    を書いてみたのですが、やはりindex.phpが読み込まれてしまって。
    「固有のタクソノミーの、全てのタームのアーカイブページをtaxonomy-$taxonomy.phpで表示する」と条件分岐ができれば良いと考えているのですが…。

    どうぞよろしくお願いいたします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • yukiforweb

    (@yukiforweb)

    「子タームの一覧を表示させようとする」URLってどんなURLを考えていらっしゃるのでしょうか?

    URLは特に指定しないのならば、
    固定ページのテンプレートに、

    $args = array(
        /*小タームに属する記事を選択する条件を記述*/
    );
    $data = new WP_Query($args);
    if($data->have_posts()):while($data->have_posts()):$data->the_post();
    /*略*/
    endwhile;endif;wp_reset_postdata();

    の様に書き込んで、そのページを開いてもらったらどうでしょう。

    yuura

    (@yuura)

    yukiforwebさん、ありがとうございます。
    URL〜と書かれているのを見て、そういえばとはたと気が付きました。
    後出しになってしまってすみません。

    taxonomy-$taxonomy.phpから、子タームに遷移するのに、ドロップダウンを使っていて、

    <?php
    $tax_id = get_queried_object_id();
    $term = get_term( $tax_id, 'タクソノミー' );
    $slug = $term->slug; //スラグ名取得
    $count = $term->count; //ターム内の記事数取得
    ?>
    <li id="categories">
    <?php wp_dropdown_categories('orderby=name&hierarchical=true&show_count=1&show_option_none=カテゴリ&taxonomy=タクソノミー&id=drop2&value_field=slug&hide_if_empty=true&child_of=' .$tax_id); ?>
    </li>
    <script type="text/javascript">
    /* <![CDATA[ */
    (function() {
    	var dropdown = document.getElementById( "drop2" );
    	function onCatChange() {
    	if ( dropdown.options[ dropdown.selectedIndex ].value ) {
    		location.href = "<?php echo esc_url( home_url( '/' ) ); ?>タクソノミー/<?php echo esc_html($slug); ?>/" + dropdown.options[ dropdown.selectedIndex ].value;
    	}
    }
    dropdown.onchange = onCatChange;
    })();
    /* ]]> */
    </script>

    URLに子タームを入れようと<?php echo esc_html($slug); ?>を追加しているのがどうも良くないようですね…。
    この部分を省けば、特に何をせずともtaxonomy-$taxonomy.phpでページが表示されました。

    子ターム名をURLに入れることを諦めればいい話ですが…。

    yukiforweb

    (@yukiforweb)

    > 子ターム名をURLに入れることを諦めればいい話ですが…。

    リライトルールで、小タームがはいってるurlの場合の処理を追加すれば良いのではと思いますがどうでしょ?

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「カスタム投稿タイプの子カテゴリアーカイブの表示」には新たに返信することはできません。