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

Pregunta:

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

¡Gracias por adelantado!

Respuesta:

Aquí hay un filtro que funcionará. Colóquelo en el functions.php su tema o 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 simplemente se copia de la clase WP_Query , excepto con el post_content LIKE eliminado.

ACTUALIZACIÓN: Eliminado like_escape() obsoleto desde 4.0

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım