为什么我不能从GET_TERMS或WP_TERM_QUERY中排除术语ID?

时间:2017-04-17 作者:That Brazilian Guy

我有一个自定义的post tipe(“artigo”),这个CPT有一个注册的分类(“artigo\\u eixo”),其中有3个注册的术语。

I want to show, in that page, a sidebar listing all terms, except the current term, 在列出所有带有该术语的帖子的页面中(http://localhost/mytaxonomy/current_term/)

但是,我无法从查询中排除当前术语。

我试图获得一个分类术语列表,但从该列表中排除了某个术语。我试着按照codex的例子来做,但我没有成功,无论是使用哪种方法get_terms()WP_Term_query().

共有3个术语,ID分别为13、14、15。没有具有这些ID的帖子或CPT项目。

我刚测试过get_queried_object_id() 它似乎返回所显示术语的正确术语ID——也就是说,如果我查看ID为13的术语的URL,函数将返回13,依此类推。

它也不能使用硬编码的值,无论是字符串、整数还是这些类型的数组。两者都不起作用:

\'exclude\' => 14
\'exclude\' => \'14\'
\'exclude\' => array(14)
\'exclude\' => array(\'14\')
PHP或WP调试日志未显示任何错误。

get\\u术语

if (is_tax( \'artigo_eixo\' )) {

    $current_eixo = get_queried_object_id();

    $args = array(
        \'taxonomy\' => \'artigo_eixo\',
        \'exclude\' => $current_eixo
    );

    $eixos = get_terms( $args );
WP\\u Term\\u查询
if (is_tax( \'artigo_eixo\' )) {

    $current_eixo = get_queried_object_id();

    $args = array(
        \'taxonomy\' => array(\'artigo_eixo\'),
        \'exclude\' => $current_eixo
    );

    $eixos = new WP_Term_Query( $args );
    $eixos = $eixos->terms;

2 个回复
最合适的回答,由SO网友:That Brazilian Guy 整理而成

原来有个函数挂接了过滤器list_terms_exclusions, 返回值在逻辑错误的条件中。我修复了它,现在查询排除这个术语按预期工作。

SO网友:Aniruddha Gawade

可能原因:get_queried_object_id() 退货int, 鉴于exclude 参数使用逗号分隔的ID数组或字符串。

首先,确保您在$current_eixo, 然后尝试将其放入数组并使用该数组作为参数。

\'exclude\' => array($current_eixo)
虽然不确定这是否是您的问题,但请尝试一下。

相关推荐

什么时候应该/不应该使用wp_get_post_Terms与Get_the_Terms?

一位用户在codex中提供了一条注释,指出唯一的区别是get\\u术语使用缓存的数据,我已经知道wp\\u get\\u post\\u术语可以让您通过slug检索数据,但我仍然想知道使用其中一个与另一个的最佳情况是什么。