• 解決済 kenken6070

    (@kenken6070)


    archive.phpで親カテゴリのページならそのまま親カテゴリの名前を、子カテゴリならその子カテゴリが属している親カテゴリの名前を取得したいのですが、記事の中には複数の親カテゴリをまたがっているものもある所為か、一部の子カテゴリで親カテゴリが取れない、または違う親カテゴリを持ってきてしまうという事態になり、うまく親カテゴリを取得できずに困ってします。

    そこで開いたページのパス(xxx.net/親カテゴリ/子カテゴリ)を取得しstrで特定の親カテゴリなら分岐という処理を作ろうと思ったのですが、REQUEST_URLやphp_selfでは暗号化されたようなぐちゃぐちゃなアドレスが出力されてしまいうまく取りたいカテゴリ名を取得できません。

    何か現在開いているURLのパスを取得、もしくはその他の方法で現在表示されている子カテゴリ一覧ページの親カテゴリ名を取得することはできないでしょうか?

    よろしくお願いします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • 記事ループ内で親カテゴリー名を表示したい、ということでしょうか?
    現状のコードを例示いただけるとわかりやすいです。

    トピック投稿者 kenken6070

    (@kenken6070)

    ご返信ありがとうございます。

    <div class=”box”>
    <?php
    $cat = get_the_category();
    $parent_id = $cat[0]->category_parent;
    if (is_category(親カテゴリーID)||$parent_id == 親カテゴリーID) { ?>

      <?php wp_list_cats(‘child_of=親カテゴリーID’); ?>

    以下ループ
    <?php } ?>
    </div>

    やりたいのは、
    「親カテゴリ」のページを開けば属している子カテゴリーの一覧を表示。
    「子カテゴリ」なら親のカテゴリを呼び出し、そこに入っている子カテゴリ一覧を表示。
    です。

    上記では親カテゴリーページの場合はそのIDに属する子カテゴリーを、子カテゴリーページではそのカテゴリーの属する親カテゴリーに属している子カテゴリー一覧を表示。という処理なのですが、一部子カテゴリーで正常に表示されない不具合がありました。
    予想ですが、おそらく一覧で一番最初に表示された記事が複数の親カテゴリーを登録しているからではないかと思います。(ここらへんはカテゴリー検索なのにどうして別の親カテゴリーの子カテゴリ一覧が出たり、もしくは何も出なかったりと不安定な感じでした)

    次に現在表示されているURLを基準に分岐させようと思ったのですが、こちらも最初に申した通り出力されるURLが暗号化されていて正常な分岐処理がされませんでした。

    予想ですが、おそらく一覧で一番最初に表示された記事が複数の親カテゴリーを登録しているからではないかと思います。

    その通りだと思います。

    未検証ですが、

    <?php
    // $cat = get_the_category();
    // $parent_id = $cat[0]->category_parent;
    // if (is_category(親カテゴリーID)||$parent_id == 親カテゴリーID) { ?>
    $queried = get_queried_object();
    if ( ! $catid = $queried->parent ) {
    	$catid = $queried->term_id;
    }
    
    <?php wp_list_cats('child_of=' . $catid); ?>

    ではどうでしょう?(孫カテゴリーとか子カテゴリーがない場合は考慮していません。)

    関数リファレンス/get queried object – WordPress Codex 日本語版

    トピック投稿者 kenken6070

    (@kenken6070)

    コードありがとうございます。
    まだすべてをチェックしたわけではありませんが、見た限りの子カテゴリーではすべてURLのパスと同じ親カテゴリーの子カテゴリー情報が出力されていました!

    $queried = get_queried_object();
    if ( ! $catid = $queried->parent ) {
    	$catid = $queried->term_id;
    }
    
    <?php wp_list_cats('child_of=' . $catid); ?>

    の仕様なのですが、
    get_queried_object()でページリクエスト情報を取得

    if ( ! $catid = $queried->parent ) {

    で親カテゴリーの名を取得(この時点で$catidの値は空)。

    <?php wp_list_cats('child_of=' . $catid); ?>

    取得したidを張り付け。

    という処理で合っていますでしょうか?

    もう一点、追加で申し訳ありませんが、子カテゴリの取得と同時に見出しとして親カテゴリ名を取りたいと思っています。
    元は

    $cats = get_the_category();
    $cat = $cats[0];
    if($cat->parent){
    $parent = get_category($cat->parent);
        echo '<dt>■'.$parent->cat_name.'</dt>';
    }else{
        echo '<dt>■'.$cat->cat_name.'</dt>';
    }

    で取得していたのですが、子カテゴリ一覧同様、これでは複数の親カテゴリにまたがっている記事がある場合、意図したカテゴリが出力されない場合がありました。

    そこで先のget_queried_object();を参考に別のサイトで見かけた

    <?php
    $cat = get_queried_object();
    
    $cat_name = $cat->name;//カテゴリー名
    $cat_id   = $cat->cat_ID;//カテゴリーID
    $cat_slug = $cat->slug;//カテゴリースラッグ
    $cat_term = $cat->term_id;//タームID
    $cat_termid   = $cat->term_taxonomy_id;//タクソノミーID
    $cat_taxonomy = $cat->taxonomy;//タクソノミー名
    $cat_count   = $cat->count;//投稿数
    $cat_description   = $cat->category_description;//カテゴリー説明文
    $parent_id = $cat->category_parent;//親カテゴリーID
    $parent = get_category($cat->category_parent);
    $parent_catname = $parent->cat_name;//親カテゴリー名
    ?>

    という処理でカテゴリ情報を抜き出そうと思ったのですが、反映するとHP内には何も表示されませんでした(echoで変数を出力した場合も同様)
    親カテゴリ名を取りたいのですが、どうすれば良いでしょうか?

    重ね重ねすみませんが、よろしくお願いします。

    トピック投稿者 kenken6070

    (@kenken6070)

    すみません。上記内容ですが一応自己解決しました

    使用したコードは下記です。

    $queried = get_queried_object();
    if ( $queried->parent == 親カテゴリーID || $queried->term_id == 親カテゴリーID) {
         echo $cat_name = get_the_category_by_ID( 親カテゴリーID );
    } else if( $queried->parent == 親カテゴリーID || $queried->term_id == 親カテゴリーID) {
        echo $cat_name = get_the_category_by_ID( 親カテゴリーID );
    }

    完全自動ではありませんが、一応これで表示されました。

    if ( ! $catid = $queried->parent ) {
    	$catid = $queried->term_id;
    }

    上記は少しはしょって(?)書きました。理解しやすくすると、

    $parentid = $queried->parent; // 子カテゴリーでない場合、0 になる
    if ( $parentid ) {
    	/**
    	 * 親カテゴリーがある場合
    	 */
    	$catid = $parentid;
    } else {
    	/**
    	 * 親カテゴリーがない($queried に格納されているのが親カテゴリーの)場合
    	 */
    	$catid = $queried->term_id;
    }

    という感じになります。

    よって、この時点で $catid には表示させたいカテゴリーのIDが格納されているはずです。

    $cat = get_category( $catid );
    echo $cat->name;

    で表示されると思うのですがいかがでしょう?(未検証です)


    ちなみに

    echo $cat->name;

    の部分ですが、カテゴリー名の表示時に標準では 'single_cat_title' というフィルターがかかっています。
    関数リファレンス/single term title – WordPress Codex 日本語版#参考

    なので、

    echo apply_filters( 'single_cat_title', $cat->name );

    とした方がベターです。


    あ、解決してましたか
    参考までに ^^;

    トピック投稿者 kenken6070

    (@kenken6070)

    補足ありがとうございます!
    これで解決済みとさせたいただきます!

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「アーカイブページのパスを取得」には新たに返信することはできません。