Wordpress函数in_category无法按预期工作

时间:2012-08-06 21:11:29

标签: php wordpress

这让我发疯,我尝试过各种各样的事情。基本上,期望的效果是使用内置的in_category函数在Wordpress中定位两个不同的类别。

这是我目前的代码:

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

这适用于类别Snacks,但不适用于类别Other Nuts。当我将Other Nuts替换为其他类别名称(例如Confections)时,它可以完美运行。

我假设这与类别名称Other Nuts中的空格有关。虽然,我尝试使用它的类别ID和类别slug无济于事。

知道这里发生了什么?

2 个答案:

答案 0 :(得分:1)

想出来。

假设你有两个类别,一个是另一个的父类,如下:

Other Nuts (Parent)
    Almonds (Child)

如果您在Wordpress中发帖并在Almonds中对其进行分类并运行一个简单的循环,例如

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

  // run your loop

  endwhile;
endif;

您将获得属于Almonds父类别的Other Nuts帖子的输出,该类别归类于Almonds。现在,如果你要改为运行这个循环:

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

    if(in_category('Other Nuts')) :  

       // run your loop

    endif;

  endwhile;
endif;

你什么也得不到。原因是您只对Almonds中的帖子进行了分类,而不是Other Nuts中的帖子。在这种情况下,Wordpress不会在父类和子类之间建立连接。归类于孩子也不会将其归类为父母。

答案 1 :(得分: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?
}