Hinzufügen von Variablen zum Senden einer Abfrage

Wie füge ich benutzerdefinierte Variablen zur WordPress-Abfrage hinzu, ohne die database zweimal zu berühren. Im folgenden Beispiel möchte ich einige Meta-Filter hinzufügen. All dieser Code funktioniert gut, aber ich habe query_posts () ausgeführt, um es auszuführen. Ich möchte in der Lage sein, zu der Abfrage hinzuzufügen, bevor es standardmäßig ausgeführt wird, damit ich die DB nicht zweimal abfragen muss.

In diesem hatte ich gehofft, wenn ich $ wp_query-> Abfrage ändere, bevor es ausgeführt wird, würden meine Änderungen der Abfrage hinzugefügt. Die Abfrage wird gerade geändert, nur die Ausgabe nicht. Irgendwelche Ideen? Vielen Dank.

add_action('pre_get_posts', 'my_custom_query'); function my_custom_query(){ if(isset($_SESSION['size']) && $_SESSION['size'] != 'all'){ $cfilter[] = array( 'key' => 'cc_size', 'value' => $_SESSION['size'] ); } if(isset($_SESSION['gender']) && $_SESSION['gender'] != 'all'){ $cfilter[] = array( 'key' => 'cc_gender', 'value' => $_SESSION['gender'] ); } $extraArgs = array( 'orderby' => 'post-title', 'paged' => get_query_var('paged') ); if(!empty($cfilter)){ $extraArgs['meta_query'] = $cfilter; } global $wp_query; $wp_query->query = array_merge( $wp_query->query, $extraArgs ); 

}

Solutions Collecting From Web of "Hinzufügen von Variablen zum Senden einer Abfrage"

Wie bereits erwähnt, können Sie die Abfrage im pre_get_posts Hook modifizieren. Dieser Hook ruft das Abfrageobjekt als Argument ab, sodass Sie keine globale Variable lesen müssen.

 add_action( 'pre_get_posts', 'wpse12692_pre_get_posts' ); function wpse12692_pre_get_posts( &$wp_query ) { if( isset( $_SESSION['size'] ) && $_SESSION['size'] != 'all' ) { $wp_query->query_vars['meta_query'] = array( 'key' => 'cc_size', 'value' => $_SESSION['size'], ); } if( isset( $_SESSION['gender'] ) && $_SESSION['gender'] != 'all' ) { $wp_query->query_vars['meta_query'] = array( 'key' => 'cc_gender', 'value' => $_SESSION['gender'], ); } $wp_query->query_vars['orderby'] = 'post-title'; // The next line is redundant, get_query_vars reads it from the global $wp_query object $wp_query->query_vars['paged'] = get_query_var('paged'); } 

Ich sehe, dass Ihre Abfrage von Sitzungsvariablen abhängt. Dies kann es schwieriger machen, einen Link zu einer anderen Seite weiterzuleiten. Haben Sie darüber nachgedacht, diese URL in die URL einzugeben und von dort zu lesen? Sie können dies tun, indem Sie zusätzliche Regeln zum Umschreiben erstellen.

'pre_get_posts' in die Aktion 'pre_get_posts' .
Beispiel:

 add_action( 'pre_get_posts', 'no_sticky_on_front' ); function no_sticky_on_front() { is_front_page() and $GLOBALS['wp_query']->query_vars['ignore_sticky_posts'] = TRUE; }