サポート » 使い方全般 » wp_list_categoriesで、特定のpost_type(カスタム投稿)のアーカイブを取得した

  • 解決済モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)


    カスタム投稿タイプとカスタムタクソノミーを併用しています。
    たとえば、以下のような感じです。

    カスタム投稿タイプを複数作成
    ・野菜(post_type=vegetable)
    ・果物(post_type=fruits)

    を、カスタムタクソノミーで分類。
    ・色(taxonomy=color)

    で、野菜を表示させるテンプレートに以下のように記述。

    <?php wp_list_categories( array(
    		'post_type' => 'vegetable',
    		'taxonomy' => 'color',
    )); ?>

    すると

    ・赤
    ・黄色
    ・緑

    みたいな感じでタクソノミーがリスト表示できます。

    しかし、「赤」をクリックした先は、赤い野菜と赤い果物のアーカイブになります。
    これを、何らか追記して、赤い野菜だけのアーカイブにできないでしょうか??

    wp_list_categoriesじゃなくてもOKです。よろしくお願いします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • >>「赤」をクリックした先は、赤い野菜と赤い果物のアーカイブになります。
    wp_list_categoriesは、絞り込んででリスト表示できますが、
    リンク先で表示される内容は、そのカテゴリに属するアイテムの一覧になるので表示部分を弄らないといけませんね。

    似たような事をしている記事なら、過去のフォーラムにありました。

    [解決済み] 各カテゴリにタグクラウド (3 件の投稿)

    ただ、mypacecreatorさんが行ってる手法でやるには、また違う方法でやらないといけないですね。

    パーマリンクがデフォルトだったら
    テーマフォルダの functions.php に

    add_filter( 'wp_list_categories', 'my_list_categories', 10, 2 );
    global $my_post_type;
    function my_add_arg( $matches ) {
      return 'href="' . add_query_arg( array( 'post_type' => $GLOBALS['my_post_type'] ), $matches[1] ) . '"';
    }
    function my_list_categories($output, $args ) {
      if ( $GLOBALS['my_post_type'] = $args['post_type'] )
        $output = preg_replace_callback( '|href="([^"]+)"|', 'my_add_arg', $output );
    
      return $output;
    }

    と書けば OK◎

    パーマリンクがデフォルトじゃないなら
    post_type と taxonomy の組み合わせの rewrite rule を追加して
    ソノようにリンクを加工すれば良いはず!

    #taxonomy は使い回さずに post_type ごとに作ると何かと良いよ!

    モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    おぉ!kzさんいつもありがとうございます!!

    試してみてご報告しますね^^
    (あ!差し入れするする詐欺中なので、そちらも…)

    モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    > kzさん
    バッチリでした!ありがとうございます!!
    これにて解決としますー。

    #taxonomy は使い回さずに post_type ごとに作ると何かと良いよ!

    キモに銘じます^^

    c2nprdsさんもありがとうございました!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「wp_list_categoriesで、特定のpost_type(カスタム投稿)のアーカイブを取得した」には新たに返信することはできません。