Intereting Posts
Указание существующих отображаемых изображений на ведро s3 Экран пользовательского входа – отключить восстановление пароля Использовать wp_redirect без фильтра в файле плагина Как автоматизировать настройку темы, страниц, виджетов и т. Д. Для нового сайта на нескольких сайтах? Создание динамической фильтрации на пользовательском типе сообщений Как разрешить роли редактора изменять параметры темы? Пользовательский тип сообщения больше не показывает код, добавленный кодом? get_current_blog_id возвращает 1 в многоузловой настройке Как получить список скриптов в порядке зависимостей Как сделать две страницы в WordPress для отображения последних страниц и популярных страниц Изменение пути видимого URL-адреса к файлам css и js добавьте <div> в конец сообщения в цикле с плагином WP_Query, заказанный meta_value_num, не получает сообщения без этого мета-поля Запретить WordPress переписывать URL для одного шаблона Использование esc_url () на URL-адресе более одного раза

Смешивание обычных и настраиваемых типов сообщений (с 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 .