Très court astuce: WordPress, exclure les pages de la recherche et post

Le moteur WordPress intérieure exploités pour la recherche (le standard sans ajout de plugin) effectue un faible niveau classique query_post() . La recherche est effectuée dapperttutto sans exclusion. Cette caractéristique peut être commandé, cependant, ce qui permet, par exemple, pour effectuer une recherche sur tous, mais en particulier des catégories, des pages ou publiez. Il ya plusieurs façons de «filtrer» la recherche standard de WordPress, on est sfruutando le filtre pre_get_posts :

1
2
3
4
5
6
7
8
9
10
11
12
/ **
* S'il vous plaît entrer ce code dans le fichier functions.php
* Exclure les pages de recherche / id de poste avec 26,27 et 32
* /
$query ) { fonction search_filter ($ query) {
$query -> is_search ) { if ($ query -> is_search) {
set ( 'post__not_in' , array ( 26 , 27 , 32 ) ) ; $ Query -> set ('post__not_in », tableau (26, 27, 32));
}
; return $ query;
}

, 'search_filter' ) ; add_filter («pre_get_posts», «search_filter ');

Ce filtre est intéressant et vous permet d'effectuer diverses tâches sur notre requête de recherche. En analysant le paramètre d'entrée $query vous pouvez avoir une idée sur ce que vous pouvez faire:

1
2
3
4
5
6
7
8
9
10
$query ) { fonction search_filter ($ query) {
$query -> is_search ) { if ($ query -> is_search) {
; echo '<pre>';
$query ) ; print_r ($ query);
; echo '</ pre>';
}
; return $ query;
}

, 'search_filter' ) ; add_filter («pre_get_posts», «search_filter ');

Par exemple, vous pouvez exclure des catégories spécifiques de recherche:

1
2
3
4
5
6
7
8
9
10
11
12
/ **
* S'il vous plaît entrer ce code dans le fichier functions.php
* Exclut la catégorie avec l'id 14
* /
$query ) { fonction search_filter ($ query) {
$query -> is_search ) { if ($ query -> is_search) {
set ( 'cat' , '-14' ) ; $ Query -> set ('chat', '-14');
}
; return $ query;
}

, 'search_filter' ) ; add_filter («pre_get_posts», «search_filter ');

. La première if dans le code qui détermine la façon dont nous sommes, dans ce cas search . Cela signifie que nous pouvons appliquer ce filtre aussi dans d'autres contextes, tels que:

1
2
3
4
5
6
7
8
9
10
11
12
/ **
* S'il vous plaît entrer ce code dans le fichier functions.php
* Exclut la catégorie avec 14 Identifiant de l'alimentation
* /
$query ) { fonction search_filter ($ query) {
$query -> is_feed ) { if ($ query -> is_feed) {
set ( 'cat' , '-14' ) ; $ Query -> set ('chat', '-14');
}
; return $ query;
}

, 'search_filter' ) ; add_filter («pre_get_posts», «search_filter ');

6 commentaires à: ""

  1. 8 juillet 2009 Undolog.com »Très court astuce: Wordpress, exclure pages et post ... :

    [...] En outre consulter l'article original: Undolog.com »Très court astuce: WordPress, exclure des pages et des postes ... Articles connexes: Très court astuce: les pères pages et des pages d'enfants dans WordPress [...]

  2. 9 octobre 2011 matthew :

    Très intéressant. Mais j'aurais besoin d'une chose: la recherche effectue actuellement la numérisation sur le texte de la page / post. Comment puis-je changer parce qu'il ne regarde pas à l'intérieur du contenu textuel, mais simplement comme une recherche uniquement dans le titre et dans les balises?

  3. 10 octobre 2011 Giovan Battista Fazioli :

    @ Matthieu :: de rechercher uniquement dans le titre, ce que je sais, vous pouvez agir sur les conditions de l'endroit où généré lors de la recherche. Si vous essayez de mettre dans le fichier functions.php le code suivant:

    1
    2
    3
    4
    5
    6
    7
    8
    $where ) { fonction de exclude_post_content ($ where) {
    is_search ( ) ) { si (is_search ()) {
    '/OR\s*\(\w+\.post_content\s+LIKE\s*(\'[^\']+\')\s*\)/' ; $ Pattern = '/ ou \ s * \ (\ w + \ post_content \ s + comme \ s * (\.' [^ \ '] + \') \ S * \) / ';
    preg_replace ( $pattern , "" , $where ) ; Où $ = preg_replace ($ pattern, "", $ where);
    }
    ; return $ où;
    }
    , 'exclude_post_content' ) ; add_filter ('posts_where', 'exclude_post_content');

    Dans la pratique élimine le contenu de la recherche unpowered de sélection fonctionne normalement WordPress.

    Pour 'tag' la question est similaire aux exemples qui sont nell'artiolo, c'est à dire les filtero userie pre_get_posts . Par exemple, si vous souhaitez rechercher uniquement dans les Posts Tagged 'premier-tags', utilisez:

    1
    2
    3
    4
    5
    6
    7
    $query ) { fonction search_filter ($ query) {
    $query -> is_search ) { if ($ query -> is_search) {
    set ( 'tag' , 'prima-tag' ) ; $ Query -> set ('tags', 'premier-tag');
    }
    ; return $ query;
    }
    , 'search_filter' ) ; add_filter («pre_get_posts», «search_filter ');
  4. 4 mai 2012 Gabriele :

    Bonjour, article très intéressant. J'aurais besoin de quelque chose de similaire, mais avec quelques modifications. Dans une page de produit j'ai un bouton qui devrait effectuer une recherche qui renvoie les recettes à base de ce produit. Comment puis-je m'assurer qu'ils ne sont que les résultats (qui ne sont rien de plus qu'un post) en omettant la page du produit lui-même et ne change pas la recherche générale du site?
    Merci

  5. 14 août 2012 AleX :

    Merci qu'elle devrait être, c'était juste ce que je voulais.

  6. 24 novembre 2012 Antonio Bonaccorso:

    Bonjour bel article ... Je construis un site gratuit et également utiliser qtranslate. Le problème est que la recherche de wordpress je rapporte les résultats de la recherche dans la langue par défaut. Même chose pour les résultats de la catégorie multiples widgets. J'espère que vous pourrez m'aider.

Laisser un commentaire

TAG XHTML PERMIS: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> entrée du code:
 <pre></pre> // blocco generico <code></code> // blocco generico [cc_actionscript][/cc_actionscript] // Actionscript [cc_actionscript3][/cc_actionscript3] // Actionscript 3 [cc_css][/cc_css] // CSS Style Sheet [cc_html][/cc_html] // HTML [cc_js][/cc_js] // Javascript [cc_objc][/cc_objc] // Objective-C [cc_php][/cc_objc] // PHP [cc_sql][/cc_sql] // SQL