Wyszukiwanie postów tylko po tytułach
Temat wydawał się dość prosty, a jednak zajął mi trochę czasu. Wujek Google wcale nie jest tak łaskawy w odpowiedzi na pytanie co zrobić aby wyniki wyszukiwania w wordpress obejmowały jedynie szukanie po tytułach postów (produktów) a nie po całej treści (opisie).
I w tym miejscu anegdota. Dawno temu miałem taką przygodę ze sklepem handlującym artykułami spożywczymi i klient zgłasza, że wyszukiwarka źle działa. Pytam się jak to źle działa? Ano po wpisaniu słowa „ser” wyszukują się wszystkie produkty. I rzeczywiście jak się okazało w opisie każdego produktu widniał akapit „produkt dla koneserów”. Dlatego też czasami przydatne jest ograniczenie wyszukiwania do samych tytułów, czy też nazw produktów.
Z pomocą przychodzi tutaj filtr posts_where pozwalający na modyfikację zapytania. W internecie jest kilka rozwiązań tego tematu, ale większość zawiera błędy. Tutaj działający kod:
add_filter( 'posts_where', 'gc_posts_where', 10, 2 );
function gc_posts_where( $where, $wp_query )
{
global $wpdb;
if ( $title = $wp_query->get( 's' ) ) {
$where .= " AND " . $wpdb->posts . ".post_title LIKE '%" . esc_sql( $wpdb->esc_like( $title ) ) . "%'";
}
return $where;
}