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

Я уверен, что это возможно, я просто не думаю, что я пойду правильно. В принципе, у меня есть два пользовательских типа сообщений (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' );