Is_Tax()函数未按预期工作

时间:2013-07-02 作者:Andrea Sciamanna

我面临is\\u tax()函数的问题。

我是一个获取特定自定义帖子类型的类方法。这些自定义帖子类型具有与分类相关的自定义字段(以及其他自定义字段)。

例如,如果我在这些自定义字段中找到了类别术语“discografia”的值,我希望我的方法在当前看到存档页/类别/discografia时返回此自定义帖子类型。

这是我的代码摘录:

// The Query
/** @var $query WP_Query */
$query = new WP_Query($query_args);

$results = false;
// The Loop
if ($query->have_posts()) {
    if (!is_home() && !is_front_page()) {
        $posts = $query->get_posts();
        foreach ($posts as $post) {
            $add = false;
            //ServiceBoxes::getBox returns the $post object as Array_A
            //and adds a new key "meta" with the custom fields I want to use
            $box = ServiceBoxes::getBox($post->ID);
            if (is_archive()) {
                if (isset($box[\'meta\'][self::$prefix][\'taxonomies\'])) {
                    foreach ($box[\'meta\'][self::$prefix][\'taxonomies\'] as $tax => $terms) {
                        if ($terms) {
                            if (is_tax($tax, $terms)) {
                                $add = true;
                            }
                        }
                    }
                }
            }
            if ($add) $results[] = $box;

        }
    } else {
        $results = $query->get_posts();
    }

    return $results;
}
return false;
对这里发生的事情进行一些澄清:1$框[\'meta\'][self::$前缀][\'taxonomies\']实际上返回一个以“category”作为键的数组和一个术语数组(包括“discografia”)2。url/category/discografia/实际上返回了一系列posts3。is\\U tax($tax,$terms)返回false4。此外,is\\U tax(\'category\',\'discografia\')返回false

我怀疑我的方法中的WP\\u Query实例正在覆盖全局查询,但我不明白为什么:这是一个新实例,没有理由对is\\u tax()感到困惑。

然而,通过逐步调试,以下是在is\\U tax中调用为is_tax(\'category\', array(\'discografia\')):

  • $wp_query->is_tax( $taxonomy, $term ) 由调用is_tax()
  • 英寸$wp_query->is_tax(), if ( !$this->is_tax ) 返回false
我已经能够达到这一点:在这之后,我不知道还能做些什么来理解为什么is\\U tax属性没有按预期设置。

在调试器打开且监视列表中有一些变量的情况下,调用“/category/discografia/”(我重复一下,这是一个返回帖子的归档页面)时,我可以看到以下内容:http://www.evernote.com/shard/s6/sh/88f05447-edff-40c7-9670-902f0a92bc62/b50a28d39c9e55c7d404f912175975a4

1 个回复
最合适的回答,由SO网友:birgire 整理而成

如果你看看this partWP_Query 类别:

            switch ( $tax_query[\'taxonomy\'] ) {
                case \'category\':
                    $this->is_category = true;
                    break;
                case \'post_tag\':
                    $this->is_tag = true;
                    break;
                default:
                    $this->is_tax = true;
            }
然后它看起来像是在类别归档页面上is_category 给予true 然后is_taxfalse.

所以看起来你必须使用is_categoryis_tax ;-)

Update:

看看这张票:

当is\\u category()或is\\u tag()返回true时,is\\u tax()返回false

http://core.trac.wordpress.org/ticket/18636

它的状态当前是关闭的,带有wontfix!

结束

相关推荐

Top level parent taxonomy ID

在产品归档页面的顶部,我试图显示产品类别列表。规则应该是列表始终显示顶级的直接子级。关于WPA有几个答案,我一直在尝试实施(以我的最低技能),但我遗漏了一些东西。以下是查询: <?php $taxonomy = \'product_cat\'; $orderby = \'name\'; $order = \'DESC\'; $show_count = 0; // 1 for