Po opublikowaniu tutaj jakiegoś wrażliwego rozwiązania dostarczam nieco uproszczoną i odkażoną wersję.
Najpierw tworzymy funkcję posts_where
filtra, która pozwala wyświetlać tylko posty spełniające określone warunki:
function cc_post_title_filter($where, &$wp_query) {
global $wpdb;
if ( $search_term = $wp_query->get( 'cc_search_post_title' ) ) {
$where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'%' . $wpdb->esc_like( $search_term ) . '%\'';
}
return $where;
}
Teraz dodajemy cc_search_post_title
do naszych argumentów zapytania:
$args = array(
'cc_search_post_title' => $search_term, // search post title only
'post_status' => 'publish',
);
I wreszcie owiń filtr wokół zapytania:
add_filter( 'posts_where', 'cc_post_title_filter', 10, 2 );
$query = new WP_Query($args);
remove_filter( 'posts_where', 'cc_post_title_filter', 10 );
Korzystanie z get_posts ()
Niektóre funkcje pobierające posty nie uruchamiają filtrów, więc dołączone funkcje filtru posts_where nie zmodyfikują zapytania. Jeśli planujesz używać get_posts()
zapytania do swoich postów, musisz ustawić wartość suppress_filters
false w tablicy argumentów:
$args = array(
'cc_search_post_title' => $search_term,
'suppress_filters' => FALSE,
'post_status' => 'publish',
);
Teraz możesz użyć get_posts()
:
add_filter( 'posts_where', 'cc_post_title_filter', 10, 2 );
$posts = get_posts($args);
remove_filter( 'posts_where', 'cc_post_title_filter', 10 );
Co z s
parametrem?
s
Parametr jest dostępny:
$args = array(
's' => $search_term,
);
Dodając wyszukiwane hasło do s
parametru praca i przeszukuje tytuł postu, przeszukuje również treść postu.
Co z title
parametrem dodanym do WP 4.4?
Przekazywanie wyszukiwanego terminu do title
parametru:
$args = array(
'title' => $search_term,
);
Rozróżnia małe i wielkie litery, a LIKE
nie %LIKE%
. Oznacza to, że wyszukiwanie hello
nie zwróci postu z tytułem Hello World
lub Hello
.
$wpdb->prepare()
.