Com algumas soluções vulneráveis postadas aqui, eu venho com uma versão um pouco simplificada e higienizada.
Primeiro, criamos uma função para o posts_where
filtro, que permite mostrar apenas postagens que correspondem a condições específicas:
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;
}
Agora adicionamos cc_search_post_title
em nossos argumentos de consulta:
$args = array(
'cc_search_post_title' => $search_term, // search post title only
'post_status' => 'publish',
);
E, finalmente, envolva o filtro em torno da consulta:
add_filter( 'posts_where', 'cc_post_title_filter', 10, 2 );
$query = new WP_Query($args);
remove_filter( 'posts_where', 'cc_post_title_filter', 10 );
Usando get_posts ()
Certas funções que recuperam postagens não executam filtros, portanto, as funções de filtro posts_where que você anexa não modificam a consulta. Se você planeja usar get_posts()
para consultar suas postagens, defina suppress_filters
como false na sua matriz de argumentos:
$args = array(
'cc_search_post_title' => $search_term,
'suppress_filters' => FALSE,
'post_status' => 'publish',
);
Agora você pode usar 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 );
E o s
parâmetro?
O s
parâmetro está disponível:
$args = array(
's' => $search_term,
);
Ao adicionar seu termo de pesquisa ao s
parâmetro work e ele pesquisará o título da postagem, ele também pesquisará o conteúdo da publicação.
E o title
parâmetro que foi adicionado com o WP 4.4?
Passando um termo de pesquisa para o title
parâmetro:
$args = array(
'title' => $search_term,
);
É sensível a maiúsculas e LIKE
, não %LIKE%
. Isso significa que a pesquisa por hello
não retornará post com título Hello World
ou Hello
.
$wpdb->prepare()
.