Con una solución vulnerable publicada aquí, vengo con una versión un poco simplificada e higienizada.
Primero, creamos una función para el filtro posts_where
que le permite mostrar solo las publicaciones que coinciden con condiciones 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;
}
Ahora agregamos cc_search_post_title
en nuestros argumentos de consulta:
$args = array(
'cc_search_post_title' => $search_term, // search post title only
'post_status' => 'publish',
);
Y finalmente envuelva el filtro alrededor de la 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 ()
Ciertas funciones que recuperan publicaciones no ejecutan filtros, por lo que las funciones de filtro posts_where que adjuntas no modificarán la consulta. Si planea usar get_posts()
para consultar sus publicaciones, debe establecer suppress_filters
en falso en su matriz de argumentos:
$args = array(
'cc_search_post_title' => $search_term,
'suppress_filters' => FALSE,
'post_status' => 'publish',
);
Ahora puedes 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 );
¿Qué pasa con el parámetro s
?
El parámetro s
está disponible:
$args = array(
's' => $search_term,
);
Mientras agrega su término de búsqueda al trabajo de parámetro s
y buscará el título de la publicación, también buscará el contenido de la publicación.
¿Qué pasa con el parámetro title
que se agregó con WP 4.4?
Pasando un término de búsqueda al parámetro title
:
$args = array(
'title' => $search_term,
);
Es sensible a mayúsculas y minúsculas y LIKE
, no %LIKE%
. Esta búsqueda significa que hello
no devolverá la publicación con el título Hello World
o Hello
.