Zwei Loops von pre_get_post auf derselben Seite

Ich habe zwei Loops in der archive.php, beide sind von pre_get_post betroffen.

Mein Code auf pre_get_post ist dies:

 // My pre_get_post function my_pre_get_posts( $query ) { if ( is_admin() || ! $query->is_main_query() ) return; if ( is_post_type_archive( 'propiedad' ) ) { //Orderby $orderby = 'meta_value_num'; $order = 'ASC'; $paged = get_query_var('paged'); //Tax query $tax_query = array(); if( isset($_GET['operacion']) or isset($_GET['ambiente']) or isset($_GET['tipo']) ) { // Operacion if( isset($_GET['operacion']) && !empty($_GET['operacion']) ){ $tax_query[] = array ( 'taxonomy' => 'operacion', 'field' => 'slug', 'terms' => $_GET['operacion'], ); } // Ambiente if( isset($_GET['ambiente']) && !empty($_GET['ambiente']) ){ $tax_query[] = array ( 'taxonomy' => 'ambiente', 'field' => 'slug', 'terms' => $_GET['ambiente'], ); } // Tipo de propiedad if( isset($_GET['tipo']) && !empty($_GET['tipo']) ){ $terms = $_GET['tipo']; $tax_query[] = array ( 'taxonomy' => 'tipo_propiedad', 'field' => 'slug', 'terms' => $terms, ); } //Tax relation $tax_query['relation'] = 'AND'; } // Meta query $meta_query = array(); if( isset($_GET['con_precio']) or isset($_GET['min_precio']) or isset($_GET['max_precio']) ) { // Con precio if( isset($_GET['con_precio']) && !empty($_GET['con_precio']) ){ $meta_query[] = array( 'key' => 'operacion_mostrar-precio', 'value' => 1, ); } // Min y max precio if( isset($_GET['min_precio']) && !empty($_GET['min_precio']) && isset($_GET['max_precio']) && !empty($_GET['max_precio']) ){ $meta_query[] = array( 'key' => 'operacion_precio-ar', 'value' => array( $_GET['min_precio'], $_GET['max_precio'] ), 'type' => 'numeric', 'compare' => 'BETWEEN', ); } } if( isset($_GET['order']) && $_GET['order'] == 'DESC') { $order = 'DESC'; } //orderby $query->set( 'paged', $paged ); $query->set( 'order', $order ); $query->set( 'orderby', $orderby ); $query->set( 'meta_key', 'operacion_precio-ar' ); //seteo el tax query $query->set( 'tax_query', $tax_query ); //seteo el meta query $query->set( 'meta_query', $meta_query ); $query->set( 'posts_per_page', 4 ); //echo '
'; print_r($query); die(); return; } } add_action( 'pre_get_posts', 'my_pre_get_posts', 1 ); 

Wie Sie sehen, gibt es ein: $query->set( 'posts_per_page', 4 );

Ich brauche das in archive.php für die Paginierung, aber ich brauche das nicht in der anderen Schleife, weil ich wissen möchte, wie viele Ergebnisse gefiltert werden und Informationen nach benutzerdefinierten Feld aller Beiträge erhalten, aber das zeige mir nur 4, ich denke, weil die Paginierung es beeinflusst.

Also muss ich in einer anderen Schleife $query->set( 'posts_per_page', -1 ) : $query->set( 'posts_per_page', -1 ) , aber ich weiß nicht wie.

Solutions Collecting From Web of "Zwei Loops von pre_get_post auf derselben Seite"

Es ist gut zu wissen, wie Sie Ihren Code in header.php implementieren.

Sie können versuchen, einige Bedingung zu verschieben, um alle Abfrage nicht zu beeinflussen?

 function my_pre_get_posts( $query ) { if ( is_admin() || ! $query->is_main_query() ) return; if ( is_post_type_archive( 'propiedad' ) ) { 

Wird

 function my_pre_get_posts( $query ) { if(!is_admin()){ if ( is_post_type_archive( 'propiedad' ) ) { // all your code here if($query->is_main_query()){ $query->set( 'posts_per_page', 4 ); } else{ $query->set( 'posts_per_page', -1 ); } } } 

Aber die Methode ist nicht die beste, sie betrifft alle Abfragen für diese Archivseite (Seitenleiste, Menü). Sie benötigen mehr Bedingungen, wenn Sie Ihren Code in header.php implementieren, können Sie eine do_action('header_pre_get_post') . und rufe die richtige posts_per_page in pre_get_posts auf.

Hoffe es gibt dir einen Hinweis.