我正在尝试根据我为用户设置的自定义字段筛选帖子。allowed_categories
是“添加新用户/编辑用户”页面上的多选自定义字段,管理员可以选择用户有权访问分类中的哪些术语。在这种情况下,分类法是product_cat
. 我添加了一个用户并选择了一些术语,效果很好。我编写了一个函数,该函数应该获取用户分配到的产品类别,并根据这些值过滤返回的结果。问题是它不起作用?可能忽略了一些简单的东西。。
打印时返回的内容allowed_categories
来自当前用户。
Array
(
[0] => 100
)
我的
pre_get_posts
行动
add_action( \'pre_get_posts\', \'custom_pre_get_posts_query\' );
function custom_pre_get_posts_query( $q ) {
if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
if ( ! is_admin() && is_shop() ) {
$user = wp_get_current_user();
$allowedCats = get_field(\'allowed_categories\', \'user_\' . $user->ID);
if( isset($cats) && $cats > 0) {
$q->set( \'tax_query\', array(array(
\'taxonomy\' => \'product_cat\',
\'field\' => \'id\',
\'terms\' => $allowedCats,
\'operator\' => \'NOT IN\'
)));
}
}
remove_action( \'pre_get_posts\', \'custom_pre_get_posts_query\' );
}
最合适的回答,由SO网友:CodeMascot 整理而成
您需要修改tax_query
代码块如下所示-
$q->set( \'tax_query\', array(array(
\'taxonomy\' => \'product_cat\',
\'field\' => \'term_id\', // Here it would be \'term_id\' instead of only \'ID\'.
\'terms\' => $allowedCats,
\'operator\' => \'IN\' // May be it would be \'IN\' in stead of \'NOT IN\'. Cause you are passing allowed product categories.
)));
希望这有帮助。