Utilizarea funcției standard de căutare cu tipuri de postări personalizate
Folosesc următorul cod HTML pentru a genera o funcție de căutare pe un site WordPress:
<form method="get" action="<?php bloginfo('url'); ?>">
<fieldset>
<input type="text" name="s" value="" placeholder="caută…" maxlength="50" required="required" />
<button type="submit">Caută</button>
</fieldset>
</form>
Funcționează ok, dar doresc să returneze rezultate doar pentru un anumit tip de postare personalizată. Folosesc șablonul search.php din tema twentysixteen care conține următoarele:
<?php global $wp_query; ?>
<h1 class="search-title"><?php echo $wp_query->found_posts; ?> Rezultate găsite pentru: <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(); ?>">Citește mai mult</a></p>
</div>
</li>
<?php } ?>
</ul>
<?php } ?>
Există vreo variabilă pe care o pot adăuga undeva pentru a returna rezultate doar pentru un anumit tip de postare? Mulțumesc

Bine, am cercetat puțin mai mult și se pare că este destul de simplu. Trebuia doar să adaug un input ascuns în formularul de căutare. Postez asta aici pentru oricine altcineva care caută răspunsul:
<form class="search" action="<?php echo home_url( '/' ); ?>">
<input type="search" name="s" placeholder="Căutare…">
<input type="submit" value="Caută">
<input type="hidden" name="post_type" value="custom-post-type">
</form>
Evident, va trebui să înlocuiți valoarea "custom-post-type" cu propriul vostru tip de postare personalizată.

A funcționat și la mine, iar dacă vrei să incluzi mai multe tipuri de postări, poți folosi mai multe input-uri cu numele "post_type[]", de exemplu dacă vrei să cauți atât în tipul "product" cât și "post": <input type="hidden" name="post_type[]" value="product" /><input type="hidden" name="post_type[]" value="post" />

O soluție mai elegantă ar fi să modificăm interogarea principală folosind acțiunea 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' );
Această abordare nu necesită nicio modificare în șablon.
