2012-08-06 80 views
1

这让我发疯,而且我尝试了各种不同的东西。实质上,所需的效果是使用内置的in_category函数来定位Wordpress中的两个不同类别。Wordpress函数in_category不能按预期工作

这里是我的代码,因为它目前为:

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

这将Snacks类的工作,但不能与Other Nuts类别。当我将Other Nuts替换为另一个类别名称(如Confections)时,它可以很好地工作。

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

任何想法这里发生了什么?

+0

任何运气与我提供的答案? – 2012-08-07 17:05:59

回答

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不会建立父类和子类之间的连接。被归类到孩子中并不会将其归入父母。

+0

你也可以自己写一个简单的函数来检查父子关系。 – 2012-08-06 23:09:16

+0

这个的任何例子? – Sethen 2012-08-07 03:02:47

+0

当然,只是给你一个答案。如果您需要比较类别名称(字符串)而不是ID的内容,请告诉我。 :) – 2012-08-07 04:55:31

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? 
} 
相关问题