具有多个参数的 Wordpress 过滤器

Wordpress filter with multiple parameters


我正在尝试设置一个 wordpress 页面,其中有一个包含即将发生的事件的主要部分和一个包含已通过事件的次要部分。
我正在使用此过滤器(位于 functions.php)以切换即将发生的事件和已发生的事件:
// upcoming events
function listing_filter_function($date_args){
$date_args = array(
                    'post_type'   => 'evento',
                    'meta_key' => 'start_date',
                    'posts_per_page' => -1,
                    'orderby' => 'meta_value_num',
                    'order' => 'ASC',
                    'meta_query'=> array(
                        array(
                          'key' => 'start_date',
                          'compare' => '>=',
                          'value' => date("Ymd"),
                          'type' => 'DATE'
                        )
                    ),
                );
return $date_args; } add_filter('listing_filter', 'listing_filter_function');

// events archive
function archive_filter_function($date_args){
$date_args = array(
                'post_type'   => 'evento',
                'meta_key' => 'start_date',
                'posts_per_page' => -1,
                'orderby' => 'meta_value_num',
                'order' => 'DESC',
                'meta_query'=> array(
                    array(
                      'key' => 'start_date',
                      'compare' => '<',
                      'value' => date("Ymd"),
                      'type' => 'DATE'
                    )
                ),
            );
return $date_args; } add_filter('archive_filter', 'archive_filter_function');

在此过滤器中,事件使用开始日期排序,但我还需要检查结束日期,以防止持续超过一天的事件在第一天后显示在存档部分

提前致谢!

你可以像这个例子一样使用 meta_query 关系

'meta_query'=> array(
'relation' => 'AND',
        array(
            'key' => 'start_date',
            'compare' => '>='
            'value' => date("Ymd"),
            'type' => 'DATE'
        ),
        array(
            'key' => 'end_date',
            'compare' => '<'
            'value' => date("Ymd"),
            'type' => 'DATE'
        ),
    )

对于存档,您可以检查 end_date 是否小于今天或等于或小于 (<=)

编辑以回答评论中的问题,这是在标记答案正确后提出的。请注意我不是 100% 的,因为我正在准备关于这个方法的混合结果所以如果它有效请告诉我们所以我可以更新它以反映结果

'meta_query'  => array(
    'relation' => 'OR',
    array(
        'relation' => 'AND',
        array(
            'key' => 'start_date',
            'compare' => '>'
            'value' => date("Ymd"),
            'type' => 'DATE'
        ),
        array(
            'key' => 'end_date',
            'compare' => '<'
            'value' => date("Ymd"),
            'type' => 'DATE'
        ),
    ),
    array(
        'relation' => 'AND',
        array(
            'key' => 'start_date',
            'compare' => '>'
            'value' => date("Ymd"),
            'type' => 'DATE'
        ),
        array(
            'key' => 'end_date',
            'value' => '1',
            'compare' => 'NOT EXISTS'
        ),
    ),
),

终于成功了!
我做了一些修改:

'meta_query'=> array('relation' => 'OR',
        array('relation' => 'AND',
            array(
                'key' => 'start_date',
                'compare' => '<',
                'value' => date("Ymd"),
                'type' => 'DATE'
            ),
            array(
                'key' => 'end_date',
                'value' => '',
                'compare' => '='
            ),
        ),
        array('relation' => 'AND',
            array(
                'key' => 'start_date',
                'compare' => '<',
                'value' => date("Ymd"),
                'type' => 'DATE'
            ),
            array(
                'key' => 'end_date',
                'compare' => '<',
                'value' => date("Ymd"),
                'type' => 'DATE'
            ),
        ),
    ),