Folosirea pre_get_posts pentru rezultatele de căutare negăsite
function hotlinkers_wp_query($query) {
// Verificăm dacă interogarea nu este în admin și este o căutare
if ( !$query->is_admin && $query->is_search) {
// Înlocuim liniuțele cu spații în termenul de căutare
$search_query = str_replace('-',' ', $query->query_vars['s']);
$query->set('s', $search_query);
}
return $query;
}
add_action('pre_get_posts', 'hotlinkers_wp_query');
Acest cod este pentru rezultatele de căutare găsite. În search.php am o condiție else, astfel încât dacă nu sunt găsite rezultate, afișez 15 postări aleatorii (folosind wp query).
Doresc să evit acest lucru dacă este posibil de realizat prin pre_get_posts.

@Milo are dreptate. Nu poți utiliza pre_get_posts
pentru a determina numărul de rezultate, deoarece pre_get_posts
modifică o interogare înainte ca aceasta să fie executată (de aceea este atât de util, dar nu pentru acest caz de utilizare).
Nu pot să mă gândesc la o metodă bună de a face asta folosind un filtru. Bucla ta normală este de fapt ceea ce dorești:
if( have_posts() ) : while( have_posts() ) : the_post();
// faci lucruri aici
endwhile;
else :
// nicio rezultată de căutare, rulează o nouă interogare cu WP_Query
endif;

După cum au menționat și alții, nu poți utiliza pre get posts deoarece nu există nicio modalitate de a ști dacă căutarea a returnat articole sau nu. Aș mai adăuga că utilizarea if else este o metodă foarte clară de a face acest lucru și ar putea fi alegerea mai bună dacă altcineva va lucra la acest proiect.
Dar dacă chiar dorești să o faci cu un filtru pe fie posts_results sau the_posts pentru a returna articolele de înlocuire care ar trebui afișate dacă căutarea este goală.
<?php
add_filter('the_posts', 'np_replace_empty_search', 10, 2);
function np_replace_empty_search($posts, $wp_query){
if($wp_query->is_search && empty($posts)){
$new_query = new WP_Query();
return $new_query->posts;
}
return $posts;
}
