如何在所有屏幕和模板上按用户元值过滤自定义分类中的术语

时间:2013-12-26 作者:Q Studio

我有一个自定义的分类法“q\\u客户端”-每次向这个tax添加一个新术语时,用户的ID都存储在user\\u meta中。

因此,每个用户都有一个他们添加的术语的id数组,这是一种快速的破解方法,可以绕过缺乏分类法\\元表的问题。

所以-我想使用pre\\u get\\u posts来只包括该用户在所有视图中添加的术语-admin和front-end。

以下是我目前掌握的情况:

添加操作:

add_action( \'pre_get_posts\', array ( $this, \'tax_query\' ), 2 );
方法

public function tax_query( $query ) 
{

        // get our existing user meta - or an empty array ##
        $q_client_terms = $this->get_q_client_terms();

        wp_die(var_dump($query));

        if ( $query->is_tax( \'q_client\' ) ) {

            wp_die(var_dump($q_client_terms));

            $taxquery = array(
                array(
                    \'taxonomy\'  => \'q_client\',
                    \'field\'     => \'id\',
                    \'terms\'     => $q_client_terms,
                    \'operator\'  => \'IN\'
                )
            );

            $query->set( \'tax_query\', $taxquery );
            return $query;

        }

}
主要问题是我无法获取is\\U tax或任何其他查询变量以正确捕获-var\\u dump($query)在is\\U tax()上给出布尔值false-它甚至不知道在通过admin编辑分类法时启用的是哪种帖子类型。

任何帮助都将不胜感激-谢谢!

EDIT

感谢@Milo-以下是我现在使用的代码:

   function get_terms_args( $args, $taxonomies ) {

        global $pagenow; // required if you want to only filter on certain pages ##

        if( 
            //is_admin()
            //&& \'edit-tags.php\' == $pagenow
            //&& 
            \'q_client\' == $taxonomies[0] 
        ) {

            // get our existing user meta - or array ( -1 ) to exclude all terms ##
            $q_client_terms = $this->get_q_client_terms();

            // add array of terms to the include key ##
            $args[\'include\'] = $q_client_terms; 

        }

        // kick back args Array ##
        return $args;

    }
需要注意的一点是,如果每个用户都没有添加任何术语,而您返回的是一个空数组或数组(0)-它们将显示所有术语-因此请使用数组(-1)以确保它们都是隐藏的

我已经在这个分类法的所有请求上使用了这个过滤器,因为我想在任何地方都进行过滤,而不仅仅是管理员

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

管理端的分类法屏幕的问题是它不是分类法存档。归档是帖子的集合,分类管理屏幕是术语的集合。这些屏幕上的术语通过get_terms, 修改这些参数的过滤器是get_terms_args. 类似这样的东西应该能够捕获这些查询,您可以在其中设置include 参数:

function wpa_filter_term_args( $args, $taxonomies ) {
    global $pagenow;
    if( is_admin()
        && \'edit-tags.php\' == $pagenow
        && \'q_client\' == $taxonomies[0] ){
            // assuming $q_client_terms is an array
            $args[\'include\'] = $q_client_terms; 
    }
    return $args;
}
add_filter( \'get_terms_args\', \'wpa_filter_term_args\', 10, 2 );

结束

相关推荐

Taxonomy Templates

我不太明白如何链接到我的分类法模板。我需要做一个临时页面并从那里查询我的条款吗?我当前正在使用分类层次结构:Taxonomy$labels = array( \'name\' => __( \'Product Categories\' ), \'singular_name\' => __( \'Product Category\' ), \'search_items\' =>