Intereting Posts

Показывать только сообщения, которые можно прокомментировать

У меня есть фильтр pre_get_posts, чтобы показывать исключение некоторых сообщений на главной странице. Но я не могу исключить сообщения, которые закрыты для комментариев. Как мне это сделать?

У меня есть:

function wp_filter_pre_get_posts( $query ) { // Only modify when on homepage & only the main query if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'comment_status', 'open' ); $query->set( 'tag__not_in', '188' ); $query->set( 'posts_per_page', '3' ); } } add_filter( 'pre_get_posts', 'wp_filter_pre_get_posts' ); 

Исключая пост из категории 188, отлично работает, но исключая сообщения с закрытыми комментариями. Любые намеки?

Поскольку comment_status не является встроенным аргументом запроса, но вы можете легко реализовать его:

 function wpse_214323_query_by_comment_status( $where, $wp_query ) { global $wpdb; if ( ! empty( $wp_query->query_vars['comment_status'] ) ) { $status = $wp_query->query_vars['comment_status']; if ( $status !== 'open' ) $status = 'closed'; $where .= " AND $wpdb->posts.comment_status = '$status'"; } return $where; } add_filter( 'posts_where', 'wpse_214323_query_by_comment_status', 10, 2 ); 

Используйте это в дополнение к существующему коду, теперь вы можете запросить 'comment_status' => 'open/closed'