Intereting Posts
Как сделать кнопку «удалить» неактивной в некоторых категориях? Как не отображать экземпляр виджета динамически? Две функции, использующие фильтр registration_errors Предварительно задайте параметры $ wp_query с пользовательскими правилами перезаписи и настраиваемым шаблоном_redirect Каков правильный способ создания виджета с помощью OOP Сделать родительскую категорию недоступной при наличии дочерних категорий Как получить помеченные страницы для показа с помеченными сообщениями? Пользовательский шаблон типа Post Post не вызывается Обновить сообщение meta с помощью pending_to_publish hook Как go дать значение $ wp_query Как узнать, какие действия / фильтры вызывается, когда я вызываю get_option () Изменить ссылку «войти в систему» ​​(вы должны быть авторизованы, чтобы оставить комментарий) Если я использую Apache & ngnix вместе, у меня будет меньше проблем? Могу ли я поместить 2 разных типа сообщений в одно и то же меню? Попытка сортировать и отображать категории (не сообщения) по настраиваемому полю: 'order'

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

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

Итак, как мне ограничить 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 .