Limiting a filtered query

时间:2016-04-27 作者:danielgc

我正在努力回答这个问题。我有一个页面,我将显示上个月和本月推出的产品。(http://the.nett.mx/innvictus/wp/) 一切都很好,但当我在按品牌(“marca”)过滤查询时应用相同的日期限制时,它就不起作用了。我猜我在meta_query. 我给你看我的pre_get_posts:

add_action(\'pre_get_posts\', \'my_pre_get_posts\', 10, 1);

function my_pre_get_posts( $query ) {

    global $fecha_actual, $fecha_anterior;

    if( is_admin() ) {
        return;
    }

    if( isset($query->query_vars[\'post_type\']) && $query->query_vars[\'post_type\'] == \'producto\' ) {

        $GLOBALS[\'my_query_filters\'] = array( 
            \'field_1\'   => \'marca\', 
            \'field_2\'   => \'mes\'
            );

        $meta_query = $query->get(\'meta_query\');

        foreach( $GLOBALS[\'my_query_filters\'] as $key => $name ) {

            $name = filter_input( INPUT_GET, $name, FILTER_SANITIZE_STRING );

            if( empty($_GET[ $name ]) ) {
                continue;
            }


            $value = explode(\',\', $_GET[ $name ]);

            $meta_query[] = array(
                \'key\'       => $name,
                \'value\'     => $value
            );


        } 

        $query->set(\'meta_query\', $meta_query);
        $query->set(\'meta_key\',\'fecha\');
        $query->set(\'orderby\',\'meta_value_num\');
        $query->set(\'order\',\'ASC\');

        if( !empty($_GET[ \'marca\' ]) ) {
            echo "entrada ".$fecha_actual. " & ". $fecha_anterior;

            $query->set(\'value\',array($fecha_anterior, $fecha_actual));
            $query->set(\'compare\',\'BETWEEN\');  
            $query->set(\'type\',\'DATE\'); 


            }

    }

}
我应该使用另一种技术来“过滤过滤”查询吗?Thx提前!

p、 s.FechaFronter是“前一日期”,fecha actual是“当前日期”,定义如下:$fecha_actual = current_time(\'Ymt\'); $fecha_anterior = date(\'Ymd\', strtotime("first day of last month"));) 如果您需要获取当前和上个月的

1 个回复
SO网友:danielgc

我注意到这个问题与一个自定义字段是一种分类法有关,因此,当我对该自定义帖子类型使用归档页面时,我只需要过滤查询以查找日期限制。

$fecha_actual = current_time(\'Ymt\'); //t regresa el ultimo día del mes
$fecha_anterior = date(\'Ymd\', strtotime("first day of last month"));

add_action(\'pre_get_posts\', \'my_pre_get_posts\', 10, 1);

function my_pre_get_posts( $query ) {

    global $fecha_actual, $fecha_anterior;

    if( is_admin() ) {
        return;
    }

    if( isset($query->query_vars[\'post_type\']) && $query->query_vars[\'post_type\'] == \'producto\' && is_archive()) {


        $meta_query = $query->get(\'meta_query\'); 

       if( !empty($_GET[ \'marca\' ]) ) {

             $meta_query[] =   array(
                    array(  
                        \'key\' => \'fecha\',
                        \'value\' => array($fecha_anterior, $fecha_actual),
                        \'compare\' => \'BETWEEN\',
                        \'type\' => \'DATE\'
                     )
             );

        }        



        $query->set(\'meta_query\', $meta_query);
        $query->set(\'meta_key\',\'fecha\');
        $query->set(\'orderby\',\'meta_value_num\');
        $query->set(\'order\',\'ASC\');


    }

}

相关推荐

将wp_Query替换为wp_User_Query

我在插件中制作了一些订阅者档案和单曲(个人资料页),其中我还包括了一个“用户单曲”模板,通过template_include. 不过,我正在尝试从插件中删除一些模板,以使其使用主题模板。我用了locate_template( \'single.php\' ) 从活动主题中选择单个模板。我没有使用全局wp_query 在本例中显示我的内容,但页面显示了基于查询默认值的循环(十篇帖子)。我想知道的是,我是否可以完全放弃默认查询,用wp_user_query 我可以将查询到的用户ID输入其中。然后我想筛选the