2011-06-04 97 views
3

我如何测试一个wordpress分类术语/术语页面是另一个术语的孩子?例如,如果我有一个分层次的“投资组合类别”分类。我的顶级条款是“数字”和“打印”。在打印下,我有“电视”等几个。如果我在“电视”档案中,is_tax()与is_tax('television')一样正确,但不是is_tax('print')。基本上我希望'电视'和它的兄弟姐妹以一种方式行事,而'数字'的孩子则表现另一种行为。wordpress测试如果自定义分类术语是另一个术语的孩子

这是可能的,还是最好由单独的分类法服务?

回答

6

在那个页面上说archive-portfolio-categories.php或者只是archive.php ..我相信你可以使用全局变量$ term来确定你是否在子页面上。例如:

<?php 
$term = get_term_by('slug', get_query_var('term')); 
if($term->parent > 0) 
{ 
// THIS IS A CHILD PAGE 
// .. DO STUFF HERE.. 
} 
else 
{ 
// THIS IS THE PARENT PAGE 
// .. DO OTHER STUFF HERE.. 
} 
?> 
+0

不相当。我把它放在我的taxonomy.php页面和电视税(这是'print'的孩子),它似乎仍然认为它是一个父页面。 print_t($ term)仅显示术语名称,而不是对象 – helgatheviking 2011-06-28 15:19:39

+2

对不起我的错误..您需要先执行此操作: $ term = get_term_by('slug',get_query_var('term'),get_query_var('taxonomy' )); 这会让你获得$ term变量,从而获得$ term-> parent等。 – 2011-06-29 09:33:19

+0

真棒!这样可行。你可以编辑你的答案,所以我可以接受它吗? – helgatheviking 2011-06-29 14:39:25

0

如果您只有2个顶层项目使用slug'print'和'digital',这应该有效。此代码也适用于更深层的分类树。

$current_tax = wp_get_post_terms($post->ID, 'portfolio-categories', array()); 
$current_tax_id = $curcat[0]->term_id; 

$digital = get_term_by('slug', 'digital', 'portfolio-categories', OBJECT); 
$print = get_term_by('slug', 'print', 'portfolio-categories', OBJECT); 

$sub_digital = get_term_children($digital->term_id, 'portfolio-categories'); 
$sub_print = get_term_children($print->term_id, 'portfolio-categories'); 

// this variable will hold the current top-level taxonomy term ID. 
$parent_cat_id = in_array($current_tax_id, $sub_digital) ? $digital->term_id : $print->term_id; 

请注意,我已更改为我自己的工作代码中的代码。可能有小错字。所以请检查一下,不要盲目复制粘贴这个。

+0

整洁的解决方案。感谢分享。 – helgatheviking 2012-11-07 13:35:56

1

未出现全局$项。 但是你可以使用全局$ wp_query,您可以在taxonomy-测试{}税.PHP:

<?php 
global $wp_query; 
var_dump($wp_query); 
?> 

我们看到了$ wp_query-> queried_object->母公司和:

<?php 
global $wp_query; 
var_dump($wp_query); 
if($wp_query->queried_object->parent == '0' && is_tax()){ 
    //parent 
}else { 
    //child 
} 
?> 
相关问题