Cum să limitezi căutarea doar la titlurile articolelor?

12 mar. 2011, 16:06:33
Vizualizări: 31K
Voturi: 29

Există vreo modalitate de a limita căutarea doar la titlurile articolelor? Știu că pot modifica fișierul core query.php, dar trebuie să existe o metodă de a face acest lucru folosind hooks, nu?

Mulțumesc anticipat!

0
Toate răspunsurile la întrebare 1
8
39

Iată un filtru care va face treaba. Adaugă-l în fișierul functions.php al temei tale sau într-un plugin.

/**
 * Filtru SQL pentru căutare doar în titlurile articolelor.
 *
 * @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 );

Majoritatea codului este copiat din clasa WP_Query, cu excepția eliminării condițiilor post_content LIKE.

ACTUALIZARE: Eliminat funcția învechită like_escape() începând cu versiunea 4.0

12 mar. 2011 16:51:08
Comentarii

funcționează perfect, știam că există un filtru pentru asta, dar nu l-am găsit nicăieri în codex, mulțumesc mult!

Javier Villanueva Javier Villanueva
12 mar. 2011 18:19:23

@TheDeadMedic Tocmai am încercat pe blogul meu și acea interogare specifică acum nu returnează niciun rezultat, cu sau fără acest cod. Ai vreo idee?

Ashfame Ashfame
4 aug. 2011 02:37:00

Acum funcționează ca de obicei fără cod, dar codul nu a funcționat pentru mine. A afișat aceleași rezultate :/

Ashfame Ashfame
4 aug. 2011 10:32:42

@Ashfame Am revizuit răspunsul meu.

TheDeadMedic TheDeadMedic
4 aug. 2011 15:44:44

Mulțumesc, funcționează bine, dacă elimini {$n}s lângă {$term} face căutarea exactă. Dar există o problemă, nu caută termeni cu spații precum "suc de mere". Dar caută termenul "mere".

User User
16 dec. 2011 14:12:03

Da, dacă elimini {$n}, elimini injectarea șirului wildcard. Lasă codul așa cum este și folosește argumentul URL exact=1 pentru a controla dacă căutarea este aproximativă sau explicită.

TheDeadMedic TheDeadMedic
16 dec. 2011 19:58:17

Mesaj PHP: Eroare fatală PHP: Apel către metoda nedefinită wpdb::esc_like() --- Dacă aveți o versiune mai veche de WordPress, aceasta este o funcție nouă introdusă începând cu WP 4.0

Jay Brunet Jay Brunet
10 nov. 2015 01:14:13

În loc de LIKE, aș putea face căutare prin regex? Modelul titlului meu este puțin mai nuanțat... Presupun că aceasta este o altă întrebare, dar apreciez orice indiciu. mulțumesc

Drewdavid Drewdavid
23 nov. 2019 08:12:28
Arată celelalte 3 comentarii