在PRE_GET_POST中设置数组术语时遇到问题

时间:2017-05-21 作者:Derek

我正在尝试根据我为用户设置的自定义字段筛选帖子。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\' );

}

1 个回复
最合适的回答,由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.
)));
希望这有帮助。

结束

相关推荐