Intereting Posts
Как я могу удалить всех пользователей, которые никогда не комментировали / опубликовали спам-комментарии? Отключить форматирование в текстовом поле Резервное копирование базы данных localhost (wamp) (phpmyadmin) из файлов жесткого диска в окнах? Для WordPress? Редактор страницы / сообщения с подсветкой синтаксиса Получить миниатюру сообщения в WP_Query Необходимы ли обновления WooCommerce для WordPress? Предпочтительный формат видео в формате WordPress? Нечетные /wp-admin/admin-ajax.php записи в Wassup как я могу называть изображение с изображениями в любом шаблоне? Как исправить эту вставку? Не работай для меня! Как добавить теги в пользовательский тип сообщения? HTML-теги в заголовке изображения в WordPress Получение категорий и описаний из пользовательского типа сообщений Разрешить не-админам доступ к странице темы «Настроить» Загружать родительские файлы тем перед дочерней темой functions.php

Смешивание обычных и настраиваемых типов сообщений (с meta_query) на главной странице

Не знаете, как это достичь. Я пытаюсь смешивать стандартные сообщения и пользовательские сообщения на домашней странице сайта, но только для отображения пользовательских сообщений, если установлено метазначение. Отображение сообщений работает отлично 'post_type' => array('game', 'post') но когда я добавляю в meta_query, регулярные сообщения больше не отображаются (что имеет смысл, поскольку они не соответствуют условию meta_query).

Итак, как мне ограничить meta_query только настраиваемым типом сообщения, чтобы регулярная публикация была включена?

Solutions Collecting From Web of "Смешивание обычных и настраиваемых типов сообщений (с meta_query) на главной странице"

Есть другой способ сделать трюк, 2 приходит мне на ум:

  1. используйте полный пользовательский запрос $wpdb
  2. используйте WP_Query с фильтрами, используя WP_Meta_Query для создания дополнительного sql

Я отправлю здесь пример кода для случая № 2

 /** * Run on pre_get_posts and if on home page (look at url) * add posts_where, posts_join and pre_get_posts hooks */ function home_page_game_sql( $query ) { // exit if is not main query and home index if ( ! ( $query->is_main_query() && ! is_admin() && is_home() ) ) return; add_filter( 'posts_where', 'home_page_game_filter' ); add_filter( 'posts_join', 'home_page_game_filter' ); } add_action('pre_get_posts', 'home_page_game_sql'); /** * Set the SQL filtering posts_join and posts_where * use WP_Meta_Query to generate the additional where clause */ function home_page_game_filter( $sql = '' ) { // remove filters remove_filter( current_filter(), __FUNCTION__); static $sql_game_filters; if ( is_null($sql_game_filters) ) { // SET YOUR META QUERY ARGS HERE $args = array( array( 'key' => 'my_custom_key', 'value' => 'value_your_are_looking_for', 'compare' => '=' ) ); $meta_query = new WP_Meta_Query( $args ); $sql_game_filters = $meta_query->get_sql('post', $GLOBALS['wpdb']->posts, 'ID'); } // SET YOUR CPT NAME HERE $cpt = 'game'; global $wpdb; if ( current_filter() === 'posts_where' && isset($sql_game_filters['where']) ) { $where = "AND ($wpdb->posts.post_status = 'publish') "; $where .= "AND ( $wpdb->posts.post_type = 'post' OR ( "; $where .= $wpdb->prepare( "$wpdb->posts.post_type = %s", $cpt); $where .= $sql_game_filters['where'] . ' ) )'; $where .= " GROUP BY $wpdb->posts.ID "; return $where; } if ( current_filter() === 'posts_join' && isset($sql_game_filters['join']) ) { return $sql .= $sql_game_filters['join']; } } 

См. Встроенные комментарии для дальнейшего объяснения.

Также посмотрите на WP_Meta_Query в Codex для получения полного документа о том, как установить ваши метаобычные аргументы.


редактировать

Я реорганизовал код в многоразовом плагине, используя класс. Доступен как Gist .