come limitare la ricerca per pubblicare titoli?


27

C'è un modo per limitare la ricerca ai post dei titoli? So che posso modificare il file core di query.php ma ci deve essere un modo per farlo con gli hook, giusto?

Grazie in anticipo!

Risposte:


32

Ecco un filtro che farà il trucco. Rilascialo nel tema functions.phpo in un plug-in.

/**
 * 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 maggior parte del codice viene appena copiato dalla WP_Queryclasse, ad eccezione di quello post_content LIKErimosso.

AGGIORNAMENTO: rimosso obsoleto like_escape()dalla 4.0


funziona alla perfezione, sapevo che c'era un filtro per questo, non sono riuscito a trovarlo da nessuna parte nel codice, grazie mille!
Javier Villanueva,

@TheDeadMedic L'ho appena provato sul mio blog e quella particolare query ora non restituisce alcun risultato, con o senza questo codice. Qualche idea?
Ashfame,

Ora funziona come al solito senza il codice ma il codice non ha funzionato per me. Ha mostrato gli stessi risultati: /
Ashfame

@Ashfame Ho rivisto la mia risposta.
TheDeadMedic

1
Messaggio PHP: errore irreversibile PHP: chiamata al metodo indefinito wpdb :: esc_like () --- Se hai un WordPress più vecchio, questa è una nuova funzione a partire da WP 4.0
PJ Brunet,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.