我有一个自定义的分类法“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)以确保它们都是隐藏的
我已经在这个分类法的所有请求上使用了这个过滤器,因为我想在任何地方都进行过滤,而不仅仅是管理员