is_main_query () wurde nie in WP 4.4 aufgerufen

Ich bin ziemlich neu in der WP-Entwicklung, aber soweit ich sehen kann, habe ich die korrekte Vorgehensweise in meiner benutzerdefinierten Archivseite (unten) befolgt. Wenn ich den Check für is_main_query() entferne, werden die Menüs is_main_query() und wahrscheinlich gehen viele andere Daten verloren, weil der Filter angewendet wird.

Hinzufügen von Debug-Code zeigt, dass is_main_query() nie als wahr zurückgegeben wird? Was mache ich falsch?

Mein Build ist WP 4.4 mit dem “Avada” Theme und ich nutze auch die ACF Advanced Custom Felder , um benutzerdefinierte Metadaten zu meinen Posts hinzuzufügen.

Jede Hilfe wird wirklich geschätzt, danke!

  <div id="content" layout->add_class( 'content_class' ); ?> layout->add_style( 'content_style' ); ?>> is_main_query() ) { echo "Not main query"; return; } else if ( $query->is_main_query() ) { echo "Main query called"; if( (isset($_GET['fs_date_from']) && $_GET['fs_date_from'] != '') || (isset($_GET['fs_date_to']) && $_GET['fs_date_to'] != '') || (isset($_GET['fs_music_genre']) && $_GET['fs_music_genre'] != '') || (isset($_GET['fs_keyword']) && $_GET['fs_keyword'] != '') || (isset($_GET['fs_country']) && $_GET['fs_country'] != '') || (isset($_GET['fs_festival_category']) && $_GET['fs_festival_category'] != '')) { if(isset($_GET['fs_date_from']) && $_GET['fs_date_from'] != '') { $date_from = date('Ymd',strtotime(sanitize_text_field($_GET['fs_date_from']))); $search_array['fs_date_from'] = array( 'key' => 'start_date', 'value' => $date_from, 'compare' => '>=' ); } if(isset($_GET['fs_date_to']) && $_GET['fs_date_to'] != '') { $date_to = date('Ymd',strtotime(sanitize_text_field($_GET['fs_date_to']))); $search_array['fs_date_to'] = array('key' => 'end_date', 'value' => $date_to, 'compare' => 'set('s',$keyword); } if(isset($_GET['fs_country']) && $_GET['fs_country'] != '') { $country = sanitize_text_field($_GET['fs_country']); $search_array['fs_country'] = array('key' => 'fs_country', 'value' => $country, 'compare' => '='); } $music_genre = sanitize_text_field($_GET['fs_music_genre']); if($music_genre != '') { $tax_query['music_genre'] = array( 'taxonomy' => 'music_genre', 'field' => 'id', 'terms' => array($music_genre), 'operator' => 'IN'); } $festival_category = sanitize_text_field($_GET['fs_festival_category']); if($festival_category != '') { $tax_query['fs_festival_category'] = array( 'taxonomy' => 'festival_category', 'field' => 'id', 'terms' => array($festival_category), 'operator' => 'IN'); } print_r($search_array); $search_array['relation'] = (($date_from != '' && $date_to != '')? "AND" : ""); $query->set('posts_per_page', 10); $query->set('post_type' , 'festival'); $query->set('meta_query' , $search_array); $query->set('tax_query' , $tax_query); } else { echo "Woop"; $query->set('posts_per_page', 10); $query->set('post_type' , 'festival'); } } } add_action('pre_get_posts', 'my_pre_get_posts'); if( have_posts() ) { echo "
"; fusion_pagination($pages = '', $range = 2); echo "
"; while(have_posts()) { the_post(); //setup_postdata( $post ); $image = get_field('header_image'); $image_url = $image['sizes']['medium_large']; $date_format = 'dS \o\f F Y'; /*if(get_field('start_date') != '') { $start_date = DateTime::createFromFormat('Ymd', get_field('start_date')); } else { $start_date = ''; } if(get_field('end_date') != '') { $end_date = DateTime::createFromFormat('Ymd', get_field('end_date')); } else { $end_date = ''; }*/ $start_date = get_field('start_date'); $end_date = get_field('end_date'); $vibe = substr(get_field('vibe'), 0,250)."..."; $location = get_field('location'); $country = get_field('country'); //print_r($post); $price = get_min_price(get_the_ID()); echo "

".get_the_title()."

$location" . (($location != '' && $country != '')? "," : "") . " $country

". $vibe ."
"; if($start_date != '') { echo $start_date; } echo ((get_field('start_date') != '' && get_field('end_date') != '')? " - " : ""); if($end_date != '') { echo $end_date; } echo "
$price
"; } fusion_pagination($pages = '', $range = 2); } else { echo "

Sorry, no Festivals match your search.

"; } ?>
<?php get_footer(); // Omit closing PHP tag to avoid "Headers already sent" issues.

Solutions Collecting From Web of "is_main_query () wurde nie in WP 4.4 aufgerufen"

Der pre_get_posts wird lange vor dem Rendern der Seitenvorlage aufgerufen. Move add_action('pre_get_posts', 'my_pre_get_posts'); und die function my_pre_get_posts() in der Datei functions.php Ihres Themes.

Hier ein paar Hinweise zu deinem Code:

  • Fügen Sie Geschäftslogik niemals in Vorlagen hinzu. Templates sollten niemals verwendet werden, um irgendeine Art von Logik zu berechnen, Templates sollten nur die Ergebnisse dieser Logik anzeigen. Kurz gesagt, Vorlagen sollten functionsnamen kennen, das ist es. Die function selbst sollte in einem Plugin oder in den functionsdateien Ihres Themes definiert werden

  • Zu dem Zeitpunkt, zu dem die Vorlage eingestellt ist ( über template_include ), wurde die Hauptabfrage bereits ausgeführt und nur ein entfernter Speicher. Die Hauptabfrage kann jetzt nicht geändert werden. Aus diesem Grund hat Ihre Aktion keine Auswirkungen auf die Hauptabfrage. Wie ich bereits sagte, sollten functionen, einschließlich Filter und Aktionen, in einer Plugin- oder functionsdatei enthalten sein

  • Anstatt isset($_GET['fs_date_from']) && $_GET['fs_date_from'] != '') , können Sie bei filter_input einfach Folgendes filter_input , um zu überprüfen, ob die var ist gesetzt und wird den Wert zurückgeben, wenn es ist. Sie können zusätzlich einen Filter einstellen, der die Hygiene für Sie übernimmt

     $fs_date_from = filter_input( INPUT_GET, // $_GET Global , for $_POST it will be INPUT_POST 'fs_date_from', // Name of the variable FILTER_SANITIZE_STRING // Type of filter to use to validate/sanitize ); 

    Sie können jetzt einfach überprüfen, ob $fs_date_from einen Wert hat

     if ( $fs_date_from ) { // Do something } 

    Sie können auch in filter_input_array , um mehrere $_GET Variablenwerte zu verarbeiten

Danke für deine Hilfe.

Die wichtigsten Probleme, wo ich den Code in der Datei functions.php poste und benötigt, um die if-statement zu lesen:

 $query->is_main_query() && is_post_type_archive( 'festival' ) 

Damit würde es nur meinen benutzerdefinierten Beitragstyp beeinflussen.

Vielen Dank!