这让我发疯,我尝试过各种各样的事情。基本上,期望的效果是使用内置的in_category
函数在Wordpress中定位两个不同的类别。
这是我目前的代码:
if(in_category( array("Snacks", "Other Nuts") )) :
//do something
endif;
这适用于类别Snacks
,但不适用于类别Other Nuts
。当我将Other Nuts
替换为其他类别名称(例如Confections
)时,它可以完美运行。
我假设这与类别名称Other Nuts
中的空格有关。虽然,我尝试使用它的类别ID和类别slug无济于事。
知道这里发生了什么?
答案 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?
}