Intereting Posts
Как контролировать информацию об общей информации в Facebook для главной страницы? Изменить многостраничный домен WordPress Плагин wp-e-commerce – пользовательский способ оплаты Пользовательский тип сообщения не работает с возможностями Фильтр для добавления изображения в RSS-канал не работает Как сравнить дату в пользовательском поле с сегодняшней датой в пользовательском WP_Query? Ошибка Cron Jobs Дальнейшее использование значения выбора из формы Фильтры, приоритет при запуске после plugins_loaded Как получить тему для архивирования стандартных сообщений то же самое, что и с asides, чатами и т. Д. WP REST API больше не поддерживает параметр фильтра, поэтому как мне получить сообщения в пользовательской таксономии? Аудио-теги вокруг Mp3-адреса в содержании Эффективный поиск источников уведомлений / предупреждений / ошибок Добавить код отслеживания Piwik на страницу Использование крючков действия внутри короткого кода

Поиск настраиваемого типа сообщений по метаданным

У меня есть пользовательский тип сообщения «Свойство», которое мои пользователи должны иметь возможность искать по метаданным.

У меня есть 3 функции поиска – 2 на интерфейсе 1 в админ-области – 2 из них работают как ожидалось, и один, который, кажется, не фильтрует результаты вообще.

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

В моих functions.php у меня есть следующее:

function add_query_vars($public_query_vars) { $public_query_vars[] = 'bedrooms'; $public_query_vars[] = 'type'; $public_query_vars[] = 'location'; return $public_query_vars; } add_filter('query_vars', 'add_query_vars'); function meta_search_query($query) { $query_args_code = array( 'posts_per_page' => 5, 'post_type' => 'nc_property', 'meta_key' => 'nc_code', 'meta_value' => $query->query_vars['s'], 'meta_compare' => 'LIKE' ); $query_args_meta = array( 'posts_per_page' => -1, 'post_type' => 'nc_property', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'nc_bedrooms', 'value' => $query->query_vars['bedrooms'], 'compare' => 'LIKE' ), array( 'key' => 'nc_type', 'value' => $query->query_vars['type'], 'compare' => 'LIKE' ), array( 'key' => 'nc_location', 'value' => $query->query_vars['location'], 'compare' => 'LIKE' ) ) ); if (is_admin() && $query->is_search ) { query_posts($query_args_code); } elseif (!is_admin() && $query->is_search ) { if ($_REQUEST["which_form"] == 'meta_form') { query_posts($query_args_meta); } elseif ($_REQUEST["which_form"] == 'code_form'){ query_posts($query_args_code); } } } add_filter( 'pre_get_posts', 'meta_search_query'); 

Поиск по коду свойств работает без проблем как в интерфейсе, так и в бэкэнд, однако попытка фильтровать результаты по пользовательским запросам vars – местоположение, тип и спальни – падает каждый раз.

Примерная строка запроса, которая создается, выглядит следующим образом:

 /property/?post_type=nc_property&which_form=meta_form&bedrooms=Two&type=Apartment&location=Bahceli 

На сайте есть одно свойство, которое соответствует этим деталям, но WordPress возвращает все результаты каждый раз.

Я что-то пропустил?

EDIT: Оказывается, потому что моя поисковая форма для моих мета-запросов не использовала элемент с 's' качестве его имени, $query->is_search для оператора if if возвращало false, то есть мой meta_query просто не вызывался ,

Престижность fischi за то, что он заметил это для меня! : D

Solutions Collecting From Web of "Поиск настраиваемого типа сообщений по метаданным"

В этом случае, когда вы смешиваете довольно постоянные ссылки с параметрами запроса, я бы использовал переменные $_GET в вашем запросе.

 $query_args_meta = array( 'posts_per_page' => -1, 'post_type' => 'nc_property', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'nc_bedrooms', 'value' => sanitize_text_field( $_GET['bedrooms'] ), 'compare' => 'LIKE' ), array( 'key' => 'nc_type', 'value' => sanitize_text_field( $_GET['type'] ), 'compare' => 'LIKE' ), array( 'key' => 'nc_location', 'value' => sanitize_text_field( $_GET['location'] ), 'compare' => 'LIKE' ) ) ); 

Обязательно используйте надлежащую санитарию, в зависимости от ваших потребностей, или с помощью функции, которая проверяет белые значения данных $_GET .

Также проверьте свою функцию условных выражений – вы просто изменяете запрос, если это поисковый запрос (используя s качестве параметра поиска) или изменяете оператор if .