¿Cómo limitar la búsqueda para publicar títulos?

27

¿Hay alguna forma de limitar la búsqueda para publicar títulos? Sé que puedo modificar el archivo core query.php, pero debe haber una manera de hacerlo con ganchos, ¿verdad?

¡Gracias por adelantado!

Javier Villanueva
fuente

Respuestas:

32

Aquí hay un filtro que hará el truco. Colóquelo en su tema functions.phpo en un complemento.

/**
 * Search SQL filter for matching against post title only.
 *
 * @link    http://wordpress.stackexchange.com/a/11826/1685
 *
 * @param   string      $search
 * @param   WP_Query    $wp_query
 */
function wpse_11826_search_by_title( $search, $wp_query ) {
    if ( ! empty( $search ) && ! empty( $wp_query->query_vars['search_terms'] ) ) {
        global $wpdb;

        $q = $wp_query->query_vars;
        $n = ! empty( $q['exact'] ) ? '' : '%';

        $search = array();

        foreach ( ( array ) $q['search_terms'] as $term )
            $search[] = $wpdb->prepare( "$wpdb->posts.post_title LIKE %s", $n . $wpdb->esc_like( $term ) . $n );

        if ( ! is_user_logged_in() )
            $search[] = "$wpdb->posts.post_password = ''";

        $search = ' AND ' . implode( ' AND ', $search );
    }

    return $search;
}

add_filter( 'posts_search', 'wpse_11826_search_by_title', 10, 2 );

La mayor parte del código se copia de la WP_Queryclase, excepto con los que se post_content LIKEeliminan.

ACTUALIZACIÓN: Eliminado en desuso like_escape()desde 4.0

TheDeadMedic
fuente
funciona perfectamente perfectamente, sabía que había un filtro para esto, no pude encontrarlo en ninguna parte del códice, ¡muchas gracias!
Javier Villanueva
@TheDeadMedic Acabo de probarlo en mi blog y esa consulta en particular ahora no devuelve ningún resultado, con o sin este código. ¿Algunas ideas?
Ashfame
Ahora funciona como siempre sin el código, pero el código no funcionó para mí. Mostró los mismos resultados: /
Ashfame
@Ashfame He revisado mi respuesta.
TheDeadMedic
1
Mensaje PHP: Error fatal de PHP: Llame al método indefinido wpdb :: esc_like () --- Si tiene un WordPress anterior, esta es una nueva función a partir de WP 4.0
PJ Brunet