Как работает поиск в вп?
Я не очень понял как он работает именно под капотом.
У меня стоит задача сделать алфавитный указатель,то есть кнопк a/б/в...
При нажатии на них перекидывает например на страницу с результатами поиска.
У меня была мысль пройти циклом по range a-z, вывести буквы и внутри каджый указать ссылку например ?s=А&post_type=post , либо как то по другому передать без ссылки.
Но суть в том что в вп если я в поиск вобью букву "Б", то при поиске уменя так же покажет записи с названием "аБракадаБра", а мне нужна фильрация только по первой букве.
Так же этот указатель находится на странице, а сам результат поиска я делаю через шаблон.
Шаблон подключаб так:
function template_chooser($template)
{
global $wp_query;
$post_type = get_query_var('post_type');
if ($wp_query->is_search && $post_type == 'plants') {
return locate_template('archive-search.php'); // redirect to archive-search.php
}
return $template;
}
add_filter('template_include', 'template_chooser');
Есть ли какие то идеи?Дайте знать, пожалуйста.
Версия вп последняя.
Тут тебе лучше сделать вручную запрос. Потому что вп ищет не только в заголовках, но и в контенте и в поиск происходит по вхождению фразы, слова, буквы в любом месте слова.
Тут тебе лучше сделать вручную запрос. Потому что вп ищет не только в заголовках, но и в контенте и в поиск происходит по вхождению фразы, слова, буквы в любом месте слова.
А где вообще почитать про движок поиска в вп? Откуда все это s=value в урл и тд?
Просто по поиску я тут нашел только вывод формы поиска и get_search_query().
Нет никаких настроек для поиска в вп? Например только по title ?
То есть по сути поиск в вп это query запрос с редиректом на страницу результа например?
Нет никакого редиректа, параметры УРЛ парсятся и передаются в WP_Query которая делает запрос. Далее результаты этого запроса используются для вывода на странице поиска.
заменяете на
а дальше - в каждой записи хранить в мета key первую букву заголовка
"Hello world"
в meta_key "letter_first" = 'H';
А дальше делаете свой запрос, можно и тот же
get_posts()
в котором указываете в параметрах
или же воспользоваться советом Kama и написать свой запрос в БД на выборку.
Конечно лучше запрос сделать отдельный, чем костыли в виде метаполей создавать. Так там запрос то просто ваще пишется же:
$fletter = $_GET['fletter'] ?? ''; $post_type = sanitize_key( $_GET['post_type'] ?? 'post' ); if( $fletter ){ global $wpdb; $posts_objects = $wpdb->get_col( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_title LIKE %s AND post_type = %s AND post_status = 'publish' ORDER BY post_title ASC", $wpdb->esc_like( $fletter[0] ) . '%', $post_type ) ); global $post; foreach( $posts_objects as $obj ){ $post = get_post( $obj ); setup_postdata( $post ); search_item_html(); } wp_reset_postdata(); } function search_item_html(){ global $post; ?> <h4><?php the_title() ?></h4> <?php }не спорю, что sql запрос - это правильный подход.
Но раньше, когда только начинал работать с WP и не понимал как пишутся SQL запросы (да, так бывает)
то мне понятнее было через костыли