質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.81%

カテゴリー一覧の孫カテゴリーのリンク先のみ子カテゴリーに指定したい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 3,194

dstrykn

score 20

wordpressについて質問させて頂きます。
カテゴリーid65の親カテゴリー、子カテゴリー、孫カテゴリーとありまして、カテゴリー一覧を下記のように作ったのですが、孫カテゴリーのためのページは作っていないので、孫カテゴリーのリンク先は子カテゴリのページの孫カテゴリのid(h2のid)に設定したいのですが、どなたかやり方をご教授頂けないでしょうか。
よろしくお願い申し上げます。

<?php wp_list_categories('title_li=&depth=0&child_of=65'); ?>

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

コードはテストできていませんので、なにかあったら適当に修正してください。 


functions.php に関数を準備。 

function my_list_categories( $args = '' ) {
    $defaults = array(
          'orderby' => 'name'
        , 'order' => 'DESC'
        , 'hide_empty' => false
        , 'exclude' => array()
        , 'parent' => ''
        , 'echo' => true
        , 'target_depth' => 1
        , 'now_depth' => 1
        , 'url' => ''
    );
    $r = wp_parse_args( $args, $defaults );
    $r[ 'hierarchical' ] = false;
    $output = '';
    $now_depth = $r[ 'now_depth' ];
    $next_depth = $now_depth + 1;
    $target_depth = $r[ 'target_depth' ];

    // 同じ親を持つカテゴリーを呼び出す
    $categories = get_categories( $r );
    foreach( $categories as $category ) {
        $child = '';
        // $target_depth 以下の階層では $target_depth の親のURLを引き継ぐ
        $url = ( $target_depth <= $now_depth ) ? $r[ 'url' ] : get_category_link( $category->term_id );

        // 下層を呼び出す
        if ( $target_depth > $now_depth ) { // $target_depth まで表示して、それ以降の階層を表示しない
            $child = my_list_categories( wp_parse_args( array(
                  'parent' => $category->term_id
                , 'echo' => false
                , 'now_depth' => $next_depth
                , 'url' => $url
            ), $r ) );
        }
        // liのHTMLを組む
        $output .= sprintf( '%7$s%6$s<li class="%3$s"><a href="%2$s" title="%1$s">%1$s</a>%4$s%7$s%6$s</li>'
                    , /* %1$s */ esc_html( $category->name )
                    , /* %2$s */ esc_url( $url )
                    , /* %3$s */ esc_attr( $category->slug )
                    , /* %4$s */ esc_attr( $category->name )
                    , /* %5$s */ $child
                    , /* %6$s */ ( $next_depth > 0 ) ? str_repeat( "\t", $next_depth ) : ''
                    , /* %7$s */ "\n"
                    );
    }
    // ulのHTMLを組む
    $html .= sprintf( '%3$s%2$s<ul class="catList">%1$s%3$s%2$s</ul>'
                , /* %1$s */ $output
                , /* %2$s */ ( $now_depth > 0 ) ? str_repeat( "\t", $now_depth ) : ''
                , /* %3$s */ "\n"
                );

    // 出力する
    if ( $r['echo'] ) {
        echo $html;
    } else {
        return $html;
    }
} // my_list_categories()


テンプレートのタグクラウドが必要な箇所に下記を記述。 

// 使うとき
$categories = my_list_categories( array(
      'orderby' => 'term_group'
    , 'child_of' => get_category_by_slug( 'ABC' )->term_id // 子カテゴリー(親カテゴリーから始めるときは省略)
    , 'hide_empty' => '0'
    , 'echo' => true
    , 'target_depth' => 2 // 孫カテゴリー(親カテゴリーから始めるときは「3」)
) );

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/12 17:26

    返信が遅くなり申し訳ございません。
    回答がしばらくなかったので、諦めてしまい、ここをチェックしてませんでした。

    kei344さんに教えて頂いた方法でやりたかった内容ができました。
    本当に助かりました。ありがとうございます!!

    キャンセル

0

categoryは追加で増えますか?
category.phpの中で現在のカテゴリーidなどを取得して表示を切り替えたほうがリンク先を弄るよりも楽だと思います
参考ソース
http://kawatama.net/web/1068

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/21 02:21

    ご回答ありがとうございます。
    今後もカテゴリーが増える可能性があるので、できれば他のやり方はないでしょうか。
    よろしくお願い致します。

    キャンセル

  • 2016/03/21 02:33

    自分なりに調べて、下記のコードでリストまでは作れたのですが、孫カテゴリーをどうすればいいかが、わかりません。
    どなたかやり方をご教授頂けないでしょうか。
    よろしくお願い申し上げます。

    <ul class="catList">
    <?php
    $cats_id = get_category_by_slug('ABC')->term_id;
    $args = array('orderby' => 'term_group', 'order' => 'ASC','depth' => 0,'child_of' => $cats_id,'hide_empty'=>'0','post_parent'=>'0','taxonomy' => 'category','echo'=>false);
    $categories = get_categories($args);
    $break = str_replace('br','<br>');echo $break;
    foreach($categories as $category) :
    $hierarchical = 'true';
    $cat_id = $category->cat_ID;
    $post_id = 'category_'.$cat_id;
    ?>

    <li>
    <a href="<?php echo get_bloginfo('url');?>/category/<?php echo $category->category_nicename; ?>">
    <?php echo $category->cat_name; ?>
    </a>
    </li>
    <?php endforeach; ?>
    </ul>

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.81%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る