筛选具有特定分类的所有查询

时间:2011-06-18 作者:darrinb

有没有办法过滤所有post查询并添加特定的分类法?例如,我有一个“Region”的分类对象,其中包含“Global”、“Americas”、“Europe”等术语(用户通过自定义字段在其用户配置文件中指定其区域,该字段存储为usermeta值,并添加了user cache对象)

其想法是,当登录用户导航站点时,他们只能看到在其区域内指定的内容。显然,我可以为每个页面编写一个自定义查询来包含它们的区域,但我想知道是否有方法可以访问查询对象并添加分类要求,而不管查询的目的是什么(例如,post、自定义post类型、存档页等)。

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

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

下面的代码是一个实现您所需功能的示例。看见tax_query 了解更多信息。

function my_get_posts( $query ) {
    // we only need to modify the query for logged in users
    if ( !is_user_logged_in() ) return $query;
    $current_user = wp_get_current_user();
    // assuming that user\'s region is stored as user_region meta key
    $user_region = get_user_meta( $current_user->ID, \'user_region\', true );
    $query->set( \'tax_query\', array(
        array(
            \'taxonomy\' => \'region\',
            \'field\' =>  \'slug\',
            \'terms\' => $user_region
        )
    ));
    return $query;
}
add_filter( \'pre_get_posts\', \'my_get_posts\' );

结束