Intereting Posts
Как интегрировать скрипт JS? Как я могу загружать загруженные изображения в загрузку редактора с помощью HTTPS? массовое изменение настроек изображения "ссылка на" to "ссылка на: url изображения" как дать пользователю роль? Массовая загрузка изображений и функциональность Rerrange Показывать подстраницы категории в пользовательском меню как получить конкретный контент страницы Перемещение блога из Tumblr в WordPress Запрос с использованием запроса WP с использованием цены мета-ключа Показывать комментарии во всплывающем окне Как я могу объединить эту функцию (ы), которая вставляет термины в пользовательскую таксономию с помощью этого другого, который добавляет пользовательский фильтр таксономии? Понимание поддержки типа WordPress Замените все сломанные изображения изображением цикл не отображает сообщения на странице пользовательских шаблонов Пользовательская переписывание с помощью Query vars

Расширенный поиск мета-полей

Я отчаянно пытаюсь создать расширенную форму поиска, чтобы получать сообщения по своим мета-полям. Я получил это:

[UPDATE]: Это правильный код:

/** *Registering custom query vars * */ function sy_register_query_var( $vars ){ $vars[] = 'type'; $vars[] = 'cabins'; $vars[] = 'base'; return $vars; } add_filter( 'query_vars', 'sy_register_query_var' ); <?php /** *Registering custom query vars * */ function sy_register_query_var( $vars ){ $vars[] = 'type'; $vars[] = 'people'; $vars[] = 'base'; $vars[] = 'duration'; return $vars; } add_filter( 'query_vars', 'sy_register_query_var' ); /** * Build a custom query based on several conditions * The pre_get_posts action gives developers access to the $query object by reference * any changes you make to $query are made directly to the original object - no return value is requested * */ function sy_pre_get_posts( $query ){ if( is_admin() || ! $query->is_main_query() ){ return; } $query->set( 'type', get_query_var( 'type' ) ); $query->set( 'people', get_query_var( 'people' ) ); $query->set( 'base', get_query_var( 'base' ) ); $query->set( 'duration', get_query_var( 'duration' ) ); if( !is_post_type_archive( 'fleet' ) ){ return; } $meta_query = array(); if( !empty( get_query_var( 'type' ) ) ) { $meta_query[] = array( 'key' => 'type', 'value' => get_query_var( 'type' ), 'compare' => 'LIKE' ); } elseif ( !empty( get_query_var( 'people' ) ) ){ $meta_query[] = array( 'key' => 'people', 'value' => get_query_var( 'people' ), 'compare' => 'LIKE' ); } elseif ( !empty( get_query_var( 'base' ) ) ){ $meta_query[] = array( 'key' => 'base', 'value' => get_query_var( 'base' ), 'compare' => 'LIKE' ); } elseif ( !empty( get_query_var( 'duration' ) ) ){ $meta_query[] = array( 'key' => 'duration', 'value' => get_query_var( 'duration' ), 'compare' => 'LIKE' ); } if( count( $meta_query ) > 1 ){ $meta_query['relation'] = 'AND'; } if( count( $meta_query ) > 0 ){ $query->set( 'meta_query', array($meta_query) ); } } add_action( 'pre_get_posts', 'sy_pre_get_posts', 1 ); function sy_search_form(){ $select_type = '<select name="type" style="width: 100%">'; $select_type .= '<option value="" selected="selected">' . __( 'Type', 'syacht' ) . '</option>'; $select_type .= '<option value="Motor">' . __( 'Motor', 'syacht' ) . '</option>'; $select_type .= '<option value="Sailing">' . __( 'Sailing', 'syacht' ) . '</option>'; $select_type .= '<option value="Ribs">' . __( 'Ribs', 'syacht' ) . '</option>'; $select_type .= '<option value="Caiques">' . __( 'Caiques', 'syacht' ) . '</option>'; $select_type .= '<option value="Speed Boats">' . __( 'Spead Boats', 'syacht' ) . '</option>'; $select_type .= '</select>' . "\n"; $select_people = '<select name="people" style="width: 100%">'; $select_people .= '<option value="" selected="selected">' . __( 'People', 'syacht' ) . '</option>'; $select_people .= '<option value="3 or less">' . __( '3 or less', 'syacht' ) . '</option>'; $select_people .= '<option value="4-6">' . __( '4-6', 'syacht' ) . '</option>'; $select_people .= '<option value="6 or more">' . __( '6 or more', 'syacht' ) . '</option>'; $select_people .= '</select>' . "\n"; $select_base = '<select name="base" style="width: 100%">'; $select_base .= '<option value="" selected="selected">' . __( 'Base', 'syacht' ) . '</option>'; $select_base .= '<option value="Mykonos">' . __( 'Mykonos', 'syacht' ) . '</option>'; $select_base .= '<option value="Old Port">' . __( 'Old Port', 'syacht' ) . '</option>'; $select_base .= '</select>' . "\n"; $select_duration = '<select name="duration" style="width: 100%">'; $select_duration .= '<option value="" selected="selected">' . __( 'Duration', 'syacht' ) . '</option>'; $select_duration .= '<option value="1 to 3 days">' . __( '1 to 3 days', 'syacht' ) . '</option>'; $select_duration .= '<option value="1 week">' . __( '1 week', 'syacht' ) . '</option>'; $select_duration .= '<option value="2 weeks">' . __( '2 weeks', 'syacht' ) . '</option>'; $select_duration .= '</select>' . "\n"; $output = '<form class="advanced-search" action="' . esc_url( home_url() ) . '" method="get" role="search">'; $output .= '<div class="wrap">'; $output .= '<div>'. $select_type . '</div>'; $output .= '<div>'. $select_people . '</div>'; $output .= '<div>'. $select_base . '</div>'; $output .= '<div>'. $select_duration . '</div>'; $output .= '<input type="hidden" name="post_type" value="fleet" />'; $output .= '<div><input type="submit" id="as-submit" class="button gold full" value="Search yachts" /></div>'; $output .= '<a href="javascript:void(0)" class="search-hide" title="Hide this box">Hide this box</a>'; $output .= '</div></form>'; return $output; } 

На самом деле эта форма работает, но совсем нет. Фактически на странице поиска отображаются все сообщения, относящиеся к типу пользовательских сообщений «флот», и они не фильтруются условиями поиска, которые я установил. Почему это? Где ошибка? Прошло уже несколько дней с тех пор, как я начал пытаться это решить. Спасибо всем.

Ps: Пожалуйста, не предлагайте никакого плагина. Я уже много пробовал, и никто из них не работал.

Solutions Collecting From Web of "Расширенный поиск мета-полей"

Параметр meta_query должен быть массивом массива, если вы хотите добавить отношение между разными ключами, даже если только один ключ захватить.

Итак, $ query-> set ('meta_query', $ meta_query);

Должно быть

 $query->set( 'meta_query', array($meta_query) ); 

Вы можете посмотреть WP_Query для получения более подробной информации.

Надеюсь, что это помогает и работает, я просто ищу эти подробности 😉