您需要通过以下方式筛选主查询pre_get_posts
回调。
如果您只想以这种方式处理一篇特定的帖子,那么可以直接引用/排除其帖子ID。但是,如果您希望将来的任何私人帖子都具有相同的行为,那么我将使用$post->post_status
属于private
, 并将其排除在外。
一个岗位(其中ID=123):
function wpse99672_filter_pre_get_posts( $query ) {
if ( ! is_singular() && $query->is_main_query() ) {
$query->set( \'post__not_in\', array( 123 ) );
}
}
add_action( \'pre_get_posts\', \'wpse99672_filter_pre_get_posts\' );
或者,对所有人来说
private
职位:
function wpse99672_filter_pre_get_posts( $query ) {
if ( ! is_singular() && $query->is_main_query() ) {
// Query all post objects for private posts
$private_posts = new WP_Query( array( \'post_status\' => \'private\' ) );
// Extract post IDs
// Note: for performance, you could consider
// adding this array to a transient
$private_post_ids = array();
foreach ( $private_posts as $obj ) {
$private_post_ids[] = $obj->ID;
}
$query->set( \'post__not_in\', $private_post_ids );
}
}
add_action( \'pre_get_posts\', \'wpse99672_filter_pre_get_posts\' );