我面临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
最合适的回答,由SO网友:birgire 整理而成
如果你看看this part 的WP_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_tax
是
false
.
所以看起来你必须使用is_category
和is_tax
;-)
Update:
看看这张票:
当is\\u category()或is\\u tag()返回true时,is\\u tax()返回false
http://core.trac.wordpress.org/ticket/18636
它的状态当前是关闭的,带有wontfix!