Con alguna solución vulnerable publicada aquí, vengo con una versión un poco simplificada y desinfectada.
Primero, creamos una función para el posts_where
filtro que le permite mostrar solo 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
a 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 adjunte no modificarán la consulta. Si planea usar get_posts()
para consultar sus publicaciones, debe establecerlo 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 s
parámetro?
El s
parámetro está disponible:
$args = array(
's' => $search_term,
);
Al agregar su término de búsqueda en el s
trabajo de parámetros y buscará el título de la publicación, también buscará el contenido de la publicación.
¿Qué pasa con el title
parámetro que se agregó con WP 4.4?
Pasar un término de búsqueda al title
parámetro:
$args = array(
'title' => $search_term,
);
Mayúsculas y minúsculas y LIKE
, no %LIKE%
. Esta búsqueda media hello
no devolverá la publicación con título Hello World
o Hello
.
$wpdb->prepare()
.