Verwenden Sie posts_where, um Post-IDs von wp_query auszunehmen

Ich möchte posts_where , um ein Array von Post-IDs von allen Abfragen in meiner Site auszuschließen.

Das Array mit den Post-IDs hängt vom angemeldeten Benutzer ab.

Kann mir bitte jemand sagen, wie man den Filter posts_where , um eine Liste von Post-IDs von allen Anfragen auf meiner Website auszuschließen?

Vielen Dank.

Solutions Collecting From Web of "Verwenden Sie posts_where, um Post-IDs von wp_query auszunehmen"

Anstatt posts_where , ist es besser, den pre_get_posts Filter zu verwenden. Hier ist der Code, den ich am Ende implementiere:

 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; } 

Wenn jemand dies liest und immer noch den posts_where Filter verwenden posts_where . Hier ist der gleiche Code (vereinfacht) mit diesem anderen Filter:

 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; }