Intereting Posts
Размещение фотографий и других приложений на форуме BuddyPress? Сохранение категории до публикации, до публикации публикации Обязательно ли иметь ссылку на дизайнера темы? Команды не синхронизированы; вы не можете запустить эту команду сейчас в wordpress, используя PHP 5.4 Вопрос о создании фильтров для пользовательских сообщений с использованием таксономии Как настроить настройки для обновления при использовании кнопок управления радиокнопками Захватывающие вложения изображений для Flexslider Как отображать случайных пользователей с аватарами Изменение имени входа в меню заголовка без изменения главного меню Удалить ссылку на продукт Woocommerce Страница TwentyThirteen topic Posts показывает сообщения вместо содержимого страницы Скрыть форму комментариев полностью (желательно без использования CSS) Экспорт пользовательской таксономии в плагин Ссылка на регулярное выражение String вместо роли 'contributor' Как получить правильные результаты поиска с помощью wp_query

Использование meta_query и настраиваемых полей в pre_get_posts для возврата сообщений в числовом диапазоне

Я пытаюсь создать страницу поиска для музыкальных треков, которая позволяет посетителям:

  • Выберите тип сообщения
  • Выберите жанр
  • Выберите настроение
  • Укажите диапазон бит в минуту (уд ​​/ мин)

wp_dropdown_categories() работает для жанров и настроений (например, мне не нужно изменять pre_get_posts ), но я не могу ограничивать сообщения только теми, кто находится в пределах определенного диапазона «bpm».

Код, который я написал ниже, либо не возвращает никаких результатов, если я выбираю определенные диапазоны, например 20 для «bpm_start» и 180 для «bpm_finish», или я получаю странные результаты для таких запросов:

http://www.domain.com/?s=&post_type=ibm_tracks&ibm_genres=ambient-music&ibm_moods=0&bpm_start=20&bpm_finish=180

Это должно вернуть кучу сообщений ibm_tracks из жанра ambient-music и в пользовательском поле bpm которое находится между 10 и 180, но по какой-то причине оно не возвращает никаких сообщений … в качестве примечания стороны, в примере не было настроено настроение выше, но выбор настроения не влияет на результат в любом случае, никакие сообщения не возвращаются в любом случае.

Может ли кто-нибудь увидеть, что я делаю неправильно?

Благодаря,

Осу

форма

 <?php function osu_list_terms_dd($taxonomy_type, $taxonomy, $showalltext) { $args = array( 'taxonomy' => $taxonomy_type, 'hide_empty' => true, 'name' => $taxonomy_type, 'value_field' => 'slug', 'show_option_all' => $showalltext, 'echo' => 0, //'show_count' => 1, // Useful for checking how many tracks are in a taxonomy term 'id' => 'taxonomy-filter__select-' . $taxonomy, 'orderby' => 'name', 'order' => 'ASC' ); return wp_dropdown_categories($args); } ?> <form role="search" method="get" class="search-form" action="<?php echo esc_url( home_url( '/' ) ); ?>"> <p>Search keywords:</p> <input type="search" value="<?php echo get_search_query(); ?>" name="s" /> <p>Choose post type</p> <select name="post_type"> <option value="ibm_tracks">TRACKS</option> <option value="ibm_logos">LOGOS</option> </select> <p>Choose genre</p> <?php echo osu_list_terms_dd('genres', 'ibm_genres', '- choose a genre -'); ?> <p>Choose Mood</p> <?php echo osu_list_terms_dd('moods', 'ibm_moods', '- choose a mood -'); ?> <p><em>BPM start</em></p> <select name="bpm_start"> <option value="0">0</option> <option value="10">10</option> <option value="20">20</option> ... etc... <option value="220">220</option> <option value="230">230</option> <option value="240">240</option> </select> <p><em>BPM end</em></p> <select name="bpm_finish"> <option value="0">0</option> <option value="10">10</option> <option value="20">20</option> ... etc... <option value="220">220</option> <option value="230">230</option> <option value="240">240</option> </select> </form> 

functions.php

 // ADD CUSTOM QUERY VAR'S SO BPM WORKS BELOW function osu_add_query_vars_filter( $vars ){ $vars[] = "bpm_start"; $vars[] = "bpm_finish"; return $vars; } add_filter( 'query_vars', 'osu_add_query_vars_filter' ); // MODIFY THE MAIN QUERY OBJECT FOR TRACKS AND LOGOS CUSTOM POST TYPES function osu_search_filter( $query ) { // POST ARCHIVE PAGE : Only for IBM tracks and Logos on search page if ( !is_admin() && isset($query->query_vars['post_type']) && is_search() ) { // Set vars $post_type = $_GET['post_type']; $ibm_tracks = 'ibm_tracks'; $ibm_logos = 'ibm_logos'; if(isset($post_type)) { // Only retrieve ibm_tracks // ------------------------------------------------------------------ if($post_type == $ibm_tracks) { // Set post type to ibm_tracks $query->query_vars['post_type'] = $ibm_tracks; // Allow url to alter the query $bpm_start = $_GET['bpm_start']; $bpm_finish = $_GET['bpm_finish']; // Filter posts by BPM range if(isset($bpm_start) && isset($bpm_finish)) { // Alter query with meta_query for BPM $meta_query = array( array( 'key' => 'bpm', 'value' => array($bpm_start, $bpm_finish), 'type' => 'NUMERICAL', 'compare' => 'BETWEEN' ) ); $query->set( 'meta_query', $meta_query ); } } // end if($post_type == ibm_tracks) // Only retrieve ibm_logos // ------------------------------------------------------------------ if($post_type == $ibm_logos) { // Set post type to ibm_logos $query->query_vars['post_type'] = $ibm_logos; } } // end if(isset($post_type)) } // end if ( !is_admin() etc. ) return $query; } // Hook my above function to the pre_get_posts action add_action( 'pre_get_posts', 'osu_search_filter' );