同一页面上PRE_GET_POST的两个循环

时间:2016-11-16 作者:Lucas Pulliese

我在档案中有两个循环。php,两者都受pre_get_post.

上的我的代码pre_get_post 这是:

// 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 \'<pre>\'; print_r($query); die();

    return;

    }
}
add_action( \'pre_get_posts\', \'my_pre_get_posts\', 1 );
如您所见,有:$query->set( \'posts_per_page\', 4 );

我需要这个archive.php 对于分页,但我不需要在另一个循环中使用它,因为我想知道过滤了多少结果,并通过所有帖子的自定义字段获取信息,但这只显示了4个,我认为是因为分页影响了它。

所以我需要在另一个循环中设置:$query->set( \'posts_per_page\', -1 ), 但我不知道怎么做。

1 个回复
SO网友:Benoti

了解如何在标头中实现代码会很好。php。

您可以尝试移动某些条件以不影响所有查询?

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

    if ( is_post_type_archive( \'propiedad\' ) ) {
成为

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 );
         }
      }
  }
但该方法不是最好的,它将影响此存档页(侧栏,菜单)的所有查询。当您在头中实现代码时,需要更多的条件。php您可以定义do_action(\'header_pre_get_post\'). 并在pre\\u get\\u posts中调用正确的posts\\u per\\u页面。

希望它能给你一些提示。

相关推荐

当in_the_loop()为假时,何时以及为什么is_Single(‘my_cpt’)为真?

我正在使用模板系统的示例代码。此地址的页码:http://project.test/my_cpt/hello-post/.无法理解原因is_singular( \'my_cpt\' ) 是true 虽然in_the_loop() 是false.在页面模板中The Loop "E;“工程”:if ( have_posts() ) { while ( have_posts() ) { the_post(); ?>