1

これは私を夢中にさせており、さまざまなことを試しました。in_category基本的に、望ましい効果は、組み込み関数を使用して、Wordpress の 2 つの異なるカテゴリをターゲットにすることです。

現在の私のコードは次のとおりです。

if(in_category( array("Snacks", "Other Nuts") )) :
 //do something
endif;

これはカテゴリでは機能しますSnacksが、カテゴリでは機能しませんOther NutsOther Nutsのような別のカテゴリ名に置き換えるとConfections、完全に機能します。

これは、カテゴリ名のスペースと関係があると思いますOther Nuts。ただし、カテゴリ ID とカテゴリ スラッグを使用してみましたが、役に立ちませんでした。

ここで何が起こっているのか分かりますか??

4

2 に答える 2

1

理解した。

次のように、2 つのカテゴリがあり、一方が他方の親であるとします。

Other Nuts (Parent)
    Almonds (Child)

WordPress で投稿を作成し、それをカテゴリに分類して、次Almondsのような単純なループを実行するとします。

if(have_posts()) :
  while(have_posts()) : the_post();

  // run your loop

  endwhile;
endif;

に分類された親カテゴリにAlmonds属する​​投稿の出力が得られます。ここで、代わりにこのループを実行する場合:Other NutsAlmonds

if(have_posts()) :
  while(have_posts()) : the_post();

    if(in_category('Other Nuts')) :  

       // run your loop

    endif;

  endwhile;
endif;

あなたは何も得られないでしょう。その理由は、投稿を に分類しただけで、 にAlmondsも分類しなかったためですOther Nuts。この場合、Wordpress は親カテゴリと子カテゴリを関連付けません。子に分類されても、親にも分類されません。

于 2012-08-06T21:39:43.170 に答える
0

基本的に、これは投稿の現在のすべてのカテゴリ ID を期待するすべての ID に対してチェックし、次にすべての親カテゴリ ID を期待するものに対してチェックする必要があります。代わりに、このコードを少し変更して、カテゴリ名を比較できます。

ステップ 1: これを functions.php ファイルに入れます。

function check_category_family( $categories, $expected_ids ){
  foreach( $categories as $i ){
    if( in_array( intval( $i->category_parent ), $expected_ids ) ){
      return true;
    }
  }
}

ステップ 2: この疑似コードを、作成しているカテゴリ テンプレートに入れます。

$categories = get_the_category();
$expected_ids = array( /*PUT YOUR CATEGORY IDS AS INTEGERS IN HERE*/ );

if( in_category( $expected_ids ) || check_category_family( $categories, $expected_ids ) ){
  //run the loop
} else {
  //redirect?
}
于 2012-08-07T04:54:25.097 に答える