web-dev-qa-db-fra.com

Utilisation de la fonction de recherche standard avec un type de publication personnalisé

J'utilise le formulaire html suivant pour générer une fonction de recherche sur un site wordpress:

<form method="get" action="<?php bloginfo('url'); ?>">
<fieldset>
<input type="text" name="s" value="" placeholder="search&hellip;" maxlength="50" required="required" />
<button type="submit">Search</button>
</fieldset>
</form>

Cela fonctionne bien, mais je souhaite renvoyer uniquement les résultats pour un type de publication personnalisé spécifique. J'utilise le modèle search.php du thème Twentysixteen qui contient ceci:

<?php  global $wp_query; ?>
<h1 class="search-title"><?php echo $wp_query->found_posts; ?> Results found for: <span><?php the_search_query(); ?></span></h1>

         <?php if ( have_posts() ) { ?>
           <ul class="results">
             <?php while ( have_posts() ) { the_post(); ?>
                <li>
                  <?php if ( has_post_thumbnail() ) { ?><div class="post-image"><a href="<?php echo get_permalink(); ?>"><?php the_post_thumbnail('thumbnail');?></a></div><?php }?>
                                    <div class="post-content">
                                    <h3><a href="<?php echo get_permalink(); ?>"><?php the_title();  ?></a></h3>
                  <p><?php echo substr(get_the_excerpt(), 0,140); ?>... <a href="<?php the_permalink(); ?>">Read More</a></p>
                                </div>
                </li>
             <?php } ?>
             </ul>
         <?php } ?>

Existe-t-il une variable que je peux ajouter quelque part pour ne renvoyer que les résultats d'un type de publication spécifique? Merci

2
The Sumo

D'accord, j'ai donc creusé un peu plus et cela s'est avéré assez facile. J'avais juste besoin d'ajouter une entrée cachée dans le formulaire de recherche. Afficher ceci ici pour tous ceux qui cherchent la réponse:

<form class="search" action="<?php echo home_url( '/' ); ?>">
        <input type="search" name="s" placeholder="Search&hellip;">
        <input type="submit" value="Search">
        <input type="hidden" name="post_type" value="custom-post-type">
</form>

Évidemment, vous devrez remplacer la valeur "custom-post-type" par votre propre type de post personnalisé.

8
The Sumo

Une solution plus élégante consisterait à modifier la requête principale elle-même en utilisant l'action pre_get_posts.

<?php 

function my_pre_get_posts($query) {

    if( is_admin() ) 
        return;

    if( is_search() && $query->is_main_query() ) {
        $query->set('post_type', 'custom-post-type-name');
    } 

}

add_action( 'pre_get_posts', 'my_pre_get_posts' );

Cela n'exigerait aucun changement dans le modèle.

6
tormorten