comment limiter la recherche aux articles?

27

Existe-t-il un moyen de limiter la recherche aux articles publiés? Je sais que je peux modifier le fichier principal de query.php mais il doit y avoir un moyen de le faire avec des crochets non?

Merci d'avance!

Javier Villanueva
la source

Réponses:

32

Voici un filtre qui fera l'affaire. Déposez-le dans votre thème functions.phpou un plugin.

/**
 * 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 plupart du code est juste copié à partir de la WP_Queryclasse, sauf si le post_content LIKEest supprimé.

MISE À JOUR: Supprimé obsolète like_escape()depuis 4.0

TheDeadMedic
la source
très bien fonctionne parfaitement, je savais qu'il y avait un filtre pour cela, je ne pouvais le trouver nulle part dans le codex, merci beaucoup!
Javier Villanueva
@TheDeadMedic Je viens de l'essayer sur mon blog et cette requête particulière ne renvoie désormais aucun résultat, avec ou sans ce code. Des idées?
Ashfame
Maintenant, cela fonctionne comme d'habitude sans le code, mais le code ne fonctionnait pas pour moi. Il a montré les mêmes résultats: /
Ashfame
@Ashfame J'ai révisé ma réponse.
TheDeadMedic
1
Message PHP: Erreur fatale PHP: Appel à une méthode non définie wpdb :: esc_like () --- Si vous avez un ancien WordPress, il s'agit d'une nouvelle fonction à partir de WP 4.0
PJ Brunet