サポート » 使い方全般 » カテゴリーが重複している場合の子カテゴリー名取得

  • 解決済 chatm

    (@chatm)


    現在、カテゴリーページにphpを組み込んでいます。
    親カテゴリーは出力せずに子カテゴリー名のみを出力していますが、複数カテゴリーに所属している記事の場合、その子カテゴリー名が両方表示されてしまいます。
    1つのカテゴリーだけを優先して、その子カテゴリー名を表示させたいのですが、なかなかうまくいきません。教えて頂けると助かります。

    <?php //親カテゴリーは出力せずに子カテゴリーのみを出力
    	$cats = get_the_category();
    	foreach($cats as $cat){
    	if (in_category('news')) {
        echo '<span class="' . esc_attr( $cat->slug ) . '">' . esc_html( $cat->cat_name ) . '</span>';
    	}
    	}
    ?>
6件の返信を表示中 - 1 - 6件目 (全6件中)
  • chatmさん、こんにちは。

    $cats を foreach しているので、複数のカテゴリに所属していればカテゴリの数だけ繰り返します。
    in_category('news')は news カテゴリに所属しているかどうかだけなので、例えばですが、
    if (in_category('news') && $cat->slug == 'news') {
    のように表示を限定してみてはいかがでしょうか。

    ご参考になれば。

    トピック投稿者 chatm

    (@chatm)

    すみません。やっぱりうまくいかなくて・・・。
    news(親) の 子カテゴリー名だけを出力したいのですが。
    in_category('news')
    だとやっぱり、他のカテゴリーの子カテゴリーも重複して表示され、
    if (in_category('news') && $cat->slug == 'news') {
    だと、newsという親のカテゴリー名しか表示されません。
    親カテゴリーnews の子カテゴリー名だけを優先して表示させたいです。
    お手数かけてすみません。何か良い方法があればと思います。

    chatmさん、こんにちは。

    newsという親のカテゴリー名しか表示されません。

    newsが表示したいカテゴリーだと思っていました。

    newsが親カテゴリーで、かつ表示したい子カテゴリーがあるなら以下のような感じでどうでしょうか。
    if (in_category('news') && $cat->slug == '子カテゴリーのスラッグ') {
    in_categoryで親のnewsカテゴリーが存在すること、かつ && でループしている現在のカテゴリースラッグが子カテゴリーのスラッグであることの両方を満たした場合のみ表示されます。

    ご参考になれば。

    トピック投稿者 chatm

    (@chatm)

    お応え頂きましてありがとうございます。
    子カテゴリーが3つありまして、なかなか難しいです・・・。

    parent プロパティ(親カテゴリー ID)で判定できませんか?
    if ( 123 === $cat->parent ) {
    ※ 123 は new カテゴリーの ID。

    トピック投稿者 chatm

    (@chatm)

    できました!何度も教えて頂きましてありがとうございました。大変お手数お掛けしました。
    最終のコードは下記です。(下記の「2」はカテゴリーIDです)

    <?php
    	$cats = get_the_category();
    	foreach($cats as $cat){
    	if ( 2 === $cat->parent ) {
    	echo '<span class="' . esc_attr( $cat->slug ) . '">' . esc_html( $cat->cat_name ) . '</span>';
    	}
    	}
    ?>
6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「カテゴリーが重複している場合の子カテゴリー名取得」には新たに返信することはできません。