X

Limiter la recherche aux titres d'articles uniquement

Extraits par IsItWP

Vous cherchez un moyen de limiter vos résultats de recherche aux titres des articles ? Bien qu'il existe probablement un plugin pour cela, nous avons créé un extrait de code rapide que vous pouvez utiliser pour limiter la recherche uniquement aux titres des articles dans WordPress.

Instructions :

Tout ce que vous avez à faire est d'ajouter ce code au fichier functions.php de votre thème ou dans un plugin spécifique au site :

function __search_by_title_only( $search, &$wp_query )
{
    global $wpdb;

    if ( empty( $search ) )
        return $search; // skip processing - no search term in query

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

    $search =
    $searchand = '';

    foreach ( (array) $q['search_terms'] as $term ) {
        $term = esc_sql( like_escape( $term ) );
        $search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
        $searchand = ' AND ';
    }

    if ( ! empty( $search ) ) {
        $search = " AND ({$search}) ";
        if ( ! is_user_logged_in() )
            $search .= " AND ($wpdb->posts.post_password = '') ";
    }

    return $search;
}
add_filter( 'posts_search', '__search_by_title_only', 500, 2 );

Note : Si c'est la première fois que vous ajoutez des extraits de code dans WordPress, veuillez consulter notre guide sur comment ajouter correctement des extraits de code dans WordPress, afin de ne pas casser accidentellement votre site.

Si vous avez aimé cet extrait de code, veuillez envisager de consulter nos autres articles sur le site comme : 43 meilleurs thèmes de photographie pour WordPress et 11 meilleurs plugins de slider WordPress.

Commentaires   Laisser une réponse

  1. Johanthan Smith January 6, 2023 at 4:02 pm

    de toute façon vous pouvez m'aider.... Je n'arrive pas à faire fonctionner cela avec DIVI THEM

  2. Bonjour, merci pour cet article. Je me demandais si vous saviez comment adapter le code pour qu'il fonctionne pour un type de publication personnalisé, spécifiquement pour WP Job Manager, le type de publication est : job_listing. Merci.

  3. comment ignorer les espaces dans la recherche

    par ex. iphone 7 32 go
    et iphone 7 32 go

    juste avec un espace entre 32 et go donne une grande différence dans les résultats

    comment pouvons-nous ignorer ces espaces dans la recherche wordpress en ajoutant une fonction

    afin que nous obtenions les mêmes résultats des deux types de recherche

    Veuillez me conseiller
    Cordialement

  4. Votre code fonctionne bien en local, je ne l'ai pas encore essayé en production, mes connaissances en php et wordpress ne sont pas très bonnes, j'ai essayé de faire en sorte que
    $wpdb->postmeta.page_banner_subtitle soit recherché ainsi que post_title, sans succès, hors de ma portée, quelqu'un peut-il m'aider ou m'orienter dans la bonne direction.
    Merci.

  5. est-ce pour le front-end ou cela fonctionne-t-il aussi pour le back-end ?

    1. Ceci est pour le front-end.

  6. Ça marche très bien ! Excellent extrait de code, mais comment limiter la recherche aux titres des articles uniquement et non aux titres des pages ?

    1. Salut Richard, nous sommes heureux que cela vous plaise. L'extrait est écrit spécifiquement pour les titres d'articles. Vous pouvez voir qu'il cible le CPT Articles.

  7. Cela fonctionnait bien pour moi il y a un mois.
    Maintenant, j'ai des erreurs php.
    Avez-vous une solution mise à jour ?
    C'est un excellent morceau de code pour un grand site.

    Attention : Le paramètre 2 de __search_by_title_only() attendait une référence, une valeur a été donnée dans /wp-includes/class-wp-hook.php à la ligne 303

    1. Vous pourriez essayer de changer la ligne 1 en :

      function __search_by_title_only( $search, $wp_query )

  8. Pourquoi même si j'entre du texte dans le formulaire de recherche, la limite de caractères n'est que de 5 caractères ?

    Comment résoudre ça ?

  9. Merci, mais ça fonctionne à 100% avec Chrome etc., mais pas bien (on n'obtient que la moitié des résultats attendus) avec I.E. (le navigateur n°1 mondial), bizarrement !

    1. Il se peut qu'I.E. ait un problème supplémentaire, car ce code s'exécute sur le serveur et non dans le navigateur.

  10. Bonjour, les caractères turcs et les caractères non turcs correspondent de la même manière. par exemple, lorsque je recherche « aşk », il peut donner ask, aşk. comment puis-je corriger cela ? je veux seulement aşk lorsque je recherche aşk. Merci.

  11. C'est vraiment utile – peut-on l'adapter pour rechercher les titres des articles et des pages ?

  12. C'est vraiment bien ! Merci !

  13. du lich singapore January 20, 2014 at 7:51 pm

    code : add_filter( ‘posts_search’, ‘__search_by_title_only’, 500, 2 );

    2 paramètres : 500, 2. Qu'est-ce que cela signifie ?

    1. 500 est la priorité et 2 est le nombre de paramètres dans la fonction de rappel.

  14. du lich singapore January 20, 2014 at 7:46 pm

    add_filter( ‘posts_search’, ‘__search_by_title_only’, 500, 2 );
    2 paramètres 500, 2. Qu'est-ce que cela signifie ?

  15. Je ne comprends pas grand-chose au PHP, dois-je mettre quelque chose avant et après ce code ?

  16. C'est génial… Je me demande comment ajouter ce code à la recherche back-end. Je veux aussi une recherche par titre pour le back-end wp.. 🙂

    Merci ! 🙂

  17. Salut,
    C'était vraiment génial.
    Tu viens de résoudre mon problème avec le moins d'effort de ma part.
    Merci beaucoup.

  18. disqus_JuU9dzgzNc January 18, 2013 at 2:27 pm

    C'est super ! J'ai 2 formulaires de recherche sur mon site. Est-il possible d'appliquer cette fonction à un seul des formulaires de recherche ?

  19. Salut Monsieur !
    Tu déchires, merci beaucoup

  20. Merci Kevin… exactement le code que je cherchais…

    1. Cool, content d'entendre que j'ai pu aider.

  21. Je suis nouveau (aka « je suis nul ») en PHP et WordPress.  Dois-je simplement insérer ce code n'importe où ou y a-t-il un endroit spécifique où il doit aller ou remplacer du code déjà existant ?

    J'ai mis ça au bas de la page functions.php et mon écran est devenu blanc, alors je l'ai retiré.

    1. Ok, j'ajoutais ça au fichier functions.php de WordPress et pas à celui du thème.  Ça fonctionne à merveille.

  22. Super code ! Cela nettoie vraiment la recherche WordPress.  Y a-t-il un moyen d'inclure les X premiers mots de l'article ? Peut-être avec la fonction substr ?
    $content = get_the_content();
    $content = strip_tags($content);
    echo substr($content, 0, 50);

    1. Dans votre modèle de résultats de recherche, vous pouvez limiter la quantité de texte affichée en utilisant la balise modèle d'extrait pour un résultat plus court sans aucune modification.

  23. C'est super ! Quelque chose que j'aimerais voir est un ajustement de recherche qui limite les résultats aux titres et aux tags. De cette façon, j'ai la liberté de titrer mes articles comme je veux sans avoir à me soucier d'inclure des termes de recherche par mots-clés. 

    1. Content d'entendre que le snippet vous plaît ! Si vous allez aussi loin avec les tags, etc., je regarderais le plugin « search everything » qui a beaucoup d'options que vous pouvez configurer.

  24. ça ne marche pas ! 🙁

    1. quelle version de wordpress utilisez-vous actuellement ? Je teste tout pour m'assurer que cela fonctionne avant de publier un snippet. Je vais revoir cela juste pour être sûr.

      1. 3.2.1

        voici la sortie de $search :

        ET ( ET (((wpmtx_posts.post_title LIKE ‘%alice%’) OU
        (wpmtx_posts.post_content LIKE ‘%alice%’)) ET ((wpmtx_posts.post_title
        LIKE ‘%cooper%’) OU (wpmtx_posts.post_content LIKE ‘%cooper%’)))
        (.post_title LIKE ‘%alice%’) ET (.post_title LIKE ‘%cooper%’) OU
        (.post_title LIKE ‘%alice cooper%’))

        1. a fait une petite mise à jour, voyez si cela résout le problème,

        2. Oui ! Ça marche maintenant ! Merci beaucoup !!!

      2. 3.2.1

        voici la sortie de $search :

        ET ( ET (((wpmtx_posts.post_title LIKE ‘%alice%’) OU
        (wpmtx_posts.post_content LIKE ‘%alice%’)) ET ((wpmtx_posts.post_title
        LIKE ‘%cooper%’) OU (wpmtx_posts.post_content LIKE ‘%cooper%’)))
        (.post_title LIKE ‘%alice%’) ET (.post_title LIKE ‘%cooper%’) OU
        (.post_title LIKE ‘%alice cooper%’))

  25. 29 Wordpress Tweaks to Improve Posts and Pages October 18, 2011 at 9:11 am

    [...] [Source : WPSNIPP] [...]

Ajouter un commentaire

Nous sommes ravis que vous ayez choisi de laisser un commentaire. Veuillez garder à l'esprit que tous les commentaires sont modérés conformément à notre politique de confidentialité, et tous les liens sont nofollow. N'utilisez PAS de mots-clés dans le champ du nom. Ayons une conversation personnelle et significative.

Liste de contrôle de lancement WordPress

La checklist ultime pour lancer un WordPress

Nous avons compilé tous les éléments essentiels de la liste de contrôle pour le lancement de votre prochain site Web WordPress dans un ebook pratique.
Oui, envoyez-moi l'eBook gratuit !