WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Как работает поиск в вп?

Я не очень понял как он работает именно под капотом.

У меня стоит задача сделать алфавитный указатель,то есть кнопк 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');

Есть ли какие то идеи?Дайте знать, пожалуйста.

Версия вп последняя.

Заметки к вопросу:
Kama 1.9 года назад

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

poylar 1.9 года назад

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

А где вообще почитать про движок поиска в вп? Откуда все это s=value в урл и тд?

Просто по поиску я тут нашел только вывод формы поиска и get_search_query().

Нет никаких настроек для поиска в вп? Например только по title ?

poylar 1.9 года назад

То есть по сути поиск в вп это query запрос с редиректом на страницу результа например?

Kama 1.9 года назад

Нет никакого редиректа, параметры УРЛ парсятся и передаются в WP_Query которая делает запрос. Далее результаты этого запроса используются для вывода на странице поиска.

0
poylar
1.9 года назад
  • 0
    stepan2278 www.weblancer.net/users/stepanko/?affili...
    ?s=А&post_type=post

    заменяете на

    ?q=А&post_type=post

    а дальше - в каждой записи хранить в мета key первую букву заголовка
    "Hello world"
    в meta_key "letter_first" = 'H';
    А дальше делаете свой запрос, можно и тот же
    get_posts()
    в котором указываете в параметрах

    $args = [
    	//...
    	'meta_query' => [
    		[
    			'key'   => 'letter_first',
    			'value' => $_GET['q']
    		]
    	]
    ];
    stepan 1.9 года назад

    или же воспользоваться советом Kama и написать свой запрос в БД на выборку.

    Kama 1.9 года назад

    Конечно лучше запрос сделать отдельный, чем костыли в виде метаполей создавать. Так там запрос то просто ваще пишется же:

    $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
    }
    
    stepan 1.9 года назад

    не спорю, что sql запрос - это правильный подход.
    Но раньше, когда только начинал работать с WP и не понимал как пишутся SQL запросы (да, так бывает)
    то мне понятнее было через костыли smile

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация