web-dev-qa-db-fra.com

Quelqu'un peut-il offrir de l'aide avec cette fonction?

J'essaie d'écrire une fonction pour mon fichier functions.php. Je dois faire ce qui suit;

  • parcourir les résultats de recherche et vérifier le modèle
  • si le modèle est 'landing.php', ajoutez-le à un tableau d'annonces
  • utilisez les identifiants collectés dans le tableau pour exclure ces pages des résultats de la recherche.

J'ai trouvé du code sur le forum Wordpress Codex, j'en ai ajouté un peu moi-même mais je ne sais malheureusement pas ce que je fais ...

function filter_where($where = '') {
global $wpdb; // do I need this?
if ( is_search() ) {
    if(is_page_template('landing.php')) { echo 'yes!'; } // ids collected here
    $exclude = array(286);  

    for($x=0;$x<count($exclude);$x++){
      $where .= " AND ID != ".$exclude[$x];
    }
}
return $where;
}
add_filter('posts_where', 'filter_where');
1
Dan

Le filtre que vous utilisez posts_where affecte la création de la requête SQL. Par conséquent, il est par définition exécuté avant que la requête ne soit exécutée et vous obtenez des résultats de recherche.

Par conséquent, vous ne pouvez pas parcourir les résultats à ce stade. Vous pouvez simplement extraire la liste des éléments non souhaités d’autres endroits ou la coder en dur et les utiliser pour modifier la requête.

Mettre à jour

Ok, c'est plus rapide à coder que d'essayer de résoudre avec des commentaires. Ce n'est probablement pas parfait mais devrait être un bon point de départ pour ce que vous voulez:

add_action('pre_get_posts','exclude_pages');

function exclude_pages( $query ) {

    if( !empty( $query->query_vars['s'] ) ) {

        $pages = get_posts(array(
                            'post_type' => 'page',
                            'meta_query' => array( array(
                                'key' => '_wp_page_template',
                                'value' => 'landing.php',
                            )),
                           ));

        $exclude = array();

        foreach( $pages as $page )
            $exclude[] = $page->ID;

        $query->set('post__not_in', $exclude);
    }
}
0
Rarst

Si vous devez supprimer des pages ou des publications spécifiques de vos résultats de recherche, vous pouvez facilement le faire en utilisant le plug-in " WP Hide Post ".

Selon sa description: "Vous permet de contrôler la visibilité des éléments de votre blog en créant des messages/pages cachés sur certaines parties de votre blog, tout en restant visibles dans d'autres."

En particulier, ce plugin vous permet de contrôler la visibilité d’un post dans différentes vues:

  • The Front Page (Homepage, selon votre thème, cela peut ne pas être pertinent)
  • La page Catégorie (répertoriant les articles appartenant à une catégorie)
  • La page de balises (répertoriant les articles étiquetés avec une balise donnée)
  • La page des auteurs (listant les articles appartenant à un auteur)
  • Les pages d'archives (listant les posts appartenant à la période: mois, semaine, jour, etc.)
  • Les résultats de la recherche
  • Les flux

Les messages disparaîtront des endroits où vous les avez choisis. Partout ailleurs, ils apparaîtront comme des postes réguliers. En particulier, les liens permanents des articles fonctionnent toujours, et si vous générez un plan du site, avec quelque chose comme le sitemap de Google XML, l'article sera également présent. Cela signifie que le contenu de votre message sera indexé et consultable par les moteurs de recherche.

Pour une page WordPress , ce plugin vous permet également de contrôler la visibilité avec deux options:

  • Masquer une page sur la page d'accueil (page d'accueil) uniquement.
  • Cacher une page partout dans le blog (, masquer la page dans les résultats de la recherche est facultatif).
0
Paulo Coghi