サポート » 使い方全般 » post_is_in_descendant_category()でのカテゴリごとの出し分けが上手くいかない

  • 解決済 schreib02

    (@schreib02)


    お忙しいところご覧いただきありがとうございます。

    Wordpressの関数 in_category() および post_is_in_descendant_category()を用いて
    single.php内での情報の出し分けを行いたいと考えております。

    functinos.phpに以下を追加
    
    function post_is_in_descendant_category( $cats, $_post = null )
    {
      foreach ( (array) $cats as $cat ) {
        // get_term_children() accepts integer ID only
        $descendants = get_term_children( (int) $cat, 'category');
        if ( $descendants && in_category( $descendants, $_post ) )
          return true;
      }
      return false;
    }
    single.phpに以下を追加
    
    <?php if ( in_category( 'cat-A' ) || post_is_in_descendant_category( get_term_by( 'slug', 'cat-A', 'category' ))): ?>
      カテゴリーAの記事とカテゴリーAを親に持つ子カテゴリー記事で表示する内容
    <?php endif; ?>
    
    <?php if ( in_category( 'cat-B' ) || post_is_in_descendant_category( get_term_by( 'slug', 'cat-B', 'category' ))): ?>
      カテゴリーBの記事とカテゴリーBを親に持つ子カテゴリー記事で表示する内容
    <?php endif; ?>
    
    <?php if ( in_category( 'cat-C' ) || post_is_in_descendant_category( get_term_by( 'slug', 'cat-C', 'category' ))): ?>
      カテゴリーCの記事とカテゴリーCを親に持つ子カテゴリー記事で表示する内容
    <?php endif; ?>
    

    追記:cat-A~cat-Cはカテゴリーのスラッグです。

    これでそれぞれのカテゴリに属する投稿かどうかを判別して出し分けができるでしょうか?

    現状では、基本的には属したカテゴリーの内容が表示されるのですが、何故か属していないカテゴリの内容も出てしまうことがあり、原因がよくわからない状態です。

    例えばcat-A配下でcat-Bは無関係の記事なのに、cat-Aの内容及びcat-Bの内容が出てしまう、というような問題が起きています。

    何かヒントになりそうな情報がありましたら教えていただきたく存じます。
    また不足している情報がありましたら補足させていただきます。

    お忙しい中お読み頂きましてありがとうございました。どうぞ宜しくお願い致します。

    • このトピックはschreib02が3年、 9ヶ月前に変更しました。
9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック投稿者 schreib02

    (@schreib02)

    すみません、わかったことがあります。

    Cat1 > cat-A > cat-A-1
    Cat1 > cat-B > cat-B-1
    Cat2 > cat-C > cat-C-1

    このような場合に、cat-Aを指定すると、Cat1に含まれるもの全体が出てしまうようです。

    こんにちは

    function post_is_in_descendant_category( $cat, $_post = null ) {
    	if ( $cat ) {
    		$descendants = get_term_children( $cat->term_id, 'category' );
    		if ( $descendants && in_category( $descendants, $_post ) ) {
    			return true;
    		}
    	}
    	return false;
    }

    では、どうかしら?

    トピック投稿者 schreib02

    (@schreib02)

    ishitakaさま

    早速ご返信頂きましてありがとうございます!

    無事に動きました!感動です!

    <?php if (post_is_in_descendant_category(get_term_by( ‘slug’,’cat-A‘, ‘category’ ))):?>
    という形で無事に
    cat-A配下の記事かどうかが判定出来ました!

    ご提示いただいたコードなど、ちょっとどういう原理かまでは理解できていないので勉強させていただきたいと思います。

    本当に助かりました。ありがとうございましたm(_ _)m

    トピック投稿者 schreib02

    (@schreib02)

    うーん、理由はわからないのですが、取れるカテゴリと取れないカテゴリがあるみたいで、ちょっと完全解決には至っていないようです・・・

    Cat1 > cat-A > cat-A-1
    Cat1 > cat-B > cat-B-1
    Cat2 > cat-C > cat-C-1
    Cat2 > cat-D > cat-D-1

    cat-Aでは取れても、cat-Bで取れないことがあります。
    また最上位カテゴリの記事(Cat1、Cat2など)も取れないようです。

    スラッグ名は小文字ではないでしょうか?

    in_category( 'cat-B' )

    in_category( 'cat-b' )

    トピック投稿者 schreib02

    (@schreib02)

    失礼しました。
    カテゴリのスラッグはすべて半角英数小文字とハイフンのみで名付けておりますが、結果は同様です。

    cat1 > cat-a > cat-a-1
    cat1 > cat-b > cat-b-1
    cat2 > cat-c > cat-d-1
    cat2 > cat-d > cat-d-1

    トピック投稿者 schreib02

    (@schreib02)

    何か他の問題かもしれないので、まずはin_category()で期待通りに取れるかを試してみたいと思います。

    トピック投稿者 schreib02

    (@schreib02)

    度々すみません、多分私のミスです…

    in_category()で現在のカテゴリーをチェックした上で、
    post_is_in_descendant_category()で現在のカテゴリーより下のカテゴリーをチェックするのでしたね…

    先程は
    in_category('cat-a') ||
    を省略してテストしてしまったのでそれを加えて正しく取れるかを確認します。失礼致しました。

    トピック投稿者 schreib02

    (@schreib02)

    今度こそ無事にすべて期待通りの結果を取得できました!
    お騒がせして申し訳ございませんでした。丁寧なご返信に感謝致します。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「post_is_in_descendant_category()でのカテゴリごとの出し分けが上手くいかない」には新たに返信することはできません。