使用POSTS_WHERE从wp_Query中排除帖子ID

时间:2014-12-09 作者:Gixty

我想使用posts_where 从我的网站中的所有查询中排除帖子ID数组。

包含帖子ID的数组取决于登录的用户。

谁能告诉我怎么用这个过滤器吗posts_where 要从我的网站中的所有查询中排除帖子ID列表?

非常感谢。

1 个回复
SO网友:Gixty

而不是使用posts_where 最好使用pre_get_posts 滤器以下是我最终实现的代码:

add_filter( \'pre_get_posts\', \'hide_unwanted_posts_filter\' );
function hide_unwanted_posts_filter( $query ) {
    global $current_user;
    get_currentuserinfo();
    $user_id = $current_user->ID;
    $key = \'unwanted_posts\';
    $unwanted_posts = get_user_meta($user_id,$key,true);
    if(is_user_logged_in() && !empty($unwanted_posts) && !$query->is_admin) {
        $query->set(\'post__not_in\', $unwanted_posts ); // id of page or post 21753
    }
    return $query;
}
如果有人读了这篇文章,仍然想使用posts_where 滤器下面是使用此其他筛选器的相同代码(简化):

add_filter( \'posts_where\',\'hide_unwanted_posts_filter\', 1, 2 );
function hide_unwanted_posts_filter($where, $wp_query = NULL) {
    global $wpdb;
    $wp_posts = $wpdb->prefix . "posts";
    if ( !$wp_query ) {
        global $wp_query;
    }
    if (is_user_logged_in() && !$wp_query->is_admin) {
        $where .= " AND $wp_posts.ID NOT IN (22, 3)";
    }

    return $where;
}

结束

相关推荐

比较GET_POSTS参数中的META_QUERY

我喜欢用自定义字段排除某些帖子。所以如果my_custom_field_ignore isset和1 忽略此帖子。如果未设置,则包括它。这就是我所拥有的 $args = array( \'post_type\' => $post_type, \'offset\' => $offset, \'meta_query\' => array( array(