Intereting Posts
Могу ли я отключить дальнейшие комментарии на одной странице? URL для пользовательского типа сообщения Проблема с множественным переадресацией Как добавить параметр в строку запроса поиска woocommerce Добавление текста в заголовки сообщений (пользовательские типы сообщений) в RSS Получить сообщение по названию страницы или пули список таксономических терминов в текущей должности / текущей категории Изотоп с бесконечным свитком Paginate ссылки с «уродливыми» и «хорошими» постоянными ссылками? Сделайте WordPress для поиска только этих тегов или исключите определенные теги из поиска Лучший способ хранить ежедневные просмотры сообщений? Должны ли мы использовать плагины, которые недоступны на официальном сайте WordPress? Необходимо создать поиск, который будет искать только определенную категорию Вставить сообщение в другую базу данных parse_tax_query вызывает исчезновение навигационного меню

Ограничьте поле поиска, чтобы просто выполнить поиск настраиваемого типа сообщений с настраиваемыми полями

Я уверен, что это возможно, я просто не думаю, что я пойду правильно. В принципе, у меня есть два пользовательских типа сообщений (Investigators & Centers), оба из которых имеют формы поиска на своих соответствующих страницах архива (см. Ниже) для фильтрации архива на основе пользовательского ввода и настраиваемых полей (которые индексируются по пользовательским полям поиска плагин).

http://dev.anklearthritis.co.uk/find-a-specialist/ (Следователи) http://dev.anklearthritis.co.uk/centres/ (Центры)

В настоящий момент, независимо от того, что пользователь ищет, всегда отображаются первые 6 записей.

Я использую следующий запрос (для следователей) в файле поиска

$args = array( 'post_type' => 'investigator', 'paged' => $paged, 'orderby' => 'title', 'order' => 'ASC', 'posts_per_page' => 6, //Limits the amount of posts on each page 'post_title' => 'LIKE %'.$_POST['s'].'%' ); $loop = new WP_Query( $args ); 

Затем я использую цикл while, чтобы показать каждый результат на странице.

Возможно ли это, и если да, то что я делаю неправильно? благодаря

Solutions Collecting From Web of "Ограничьте поле поиска, чтобы просто выполнить поиск настраиваемого типа сообщений с настраиваемыми полями"

post_title не является допустимым аргументом WP_Query . Если вы сбросите SQL, вы увидите, что он игнорируется:

string (189) "SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1 = 1 И wp_posts.post_type = 'исследователь' И (wp_posts.post_status = 'publish') ORDER BY wp_posts.post_title ASC LIMIT 0, 6"

Вместо этого вы можете использовать name (или pagename ), но вы не можете протолкнуть исходный SQL таким образом. Это не сработает:

string (158) "SELECT wp_posts. * FROM wp_posts WHERE 1 = 1 И wp_posts.post_name = 'like-% d00d' И wp_posts.post_type = 'исследователь' ORDER BY wp_posts.post_title ASC"

Если вы используете аргумент s как это 's' => $_POST['s'] – вы получаете то, что ищете:

string (310) "SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1 = 1 AND (((wp_posts.post_title LIKE '% d00d%') ИЛИ (wp_posts.post_content LIKE '% d00d%'))) AND (wp_posts.post_password = '') И wp_posts.post_type = 'explator' AND (wp_posts.post_status = 'publish') ORDER BY wp_posts.post_title ASC LIMIT 0, 6 "

Но вы ищете больше полей, чем просто заголовок. Чтобы ограничить это только заголовком, вы можете использовать фильтр из другого моего ответа :

 function only_title_search_wpse_119422( $search ) { remove_filter( 'posts_search', 'only_title_search_wpse_119422' ); global $wpdb; $pattern = "/\({$wpdb->posts}.post_title[^)]+\)/"; preg_match_all( $pattern, $search, $matches ); if ( ! empty( $matches[0] ) ) { $search = sprintf( " AND (%s)", implode( " AND ", $matches[0] ) ); } return $search; } add_filter( 'posts_search', 'only_title_search_wpse_119422' );