1

这让我发疯,我尝试了各种不同的东西。本质上,想要的效果是使用内置in_category函数在 Wordpress 中定位两个不同的类别。

这是我目前的代码:

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

这将适用于类别Snacks,但不适用于类别Other Nuts。当我Other Nuts用另一个类别名称替换时,例如Confections,它可以完美运行。

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

知道这里发生了什么吗?

4

2 回答 2

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 不会在父类别和子类别之间建立联系。被归类在子类中并不也将其归类在父类中。

于 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 回答