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…" 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
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…">
<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é.
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.