0

我创建了一个名为“date_dexpiration”的自定义字段 ACF,格式为:d/m/YH:i

当我创建一个没有到期日期的新帖子时,“date_dexpiration”字段未填写并保持为空。

我想在存档(使用 elementor 帖子小部件创建)中设置一个自定义过滤器,以隐藏日期为“date_dexpiration”< 今天的所有帖子。我写了这个插入function.php的代码

add_action( 'elementor/query/filter_expiration_date', function( $query ) {
    $today = date('d/m/Y H:i');
    $meta_query = $query->get( 'meta_query' );
    $meta_query = [
        [       
        'key'       => 'date_dexpiration', 
        'value'     => $today,
        'compare'   => '>=',
        ]
    ];
    $query->set( 'meta_query', $meta_query );
} );

它不起作用:

  • 不显示所有带有空字段“date_dexpiration”的帖子
  • 不显示所有填充字段“date_dexpiration”的字段

你能帮我调试这段代码吗?

4

2 回答 2

0

日期字段的 ACF 默认格式是Ymd,因此您需要转换$todayYmd格式。试试下面的代码。

add_action( 'elementor/query/filter_filter_expiration_date', function( $query ) {
    $today = date('d/m/Y H:i');
    $today = date( 'Ymd', strtotime( $today ) );
    $meta_query = $query->get( 'meta_query' );
    $meta_query = [
        [       
        'key'       => 'date_dexpiration', 
        'value'     => $today,
        'compare'   => '>=',
        ]
    ];
    $query->set( 'meta_query', $meta_query );
} );
于 2021-05-01T17:35:35.630 回答
0

谢谢您的回答。我不得不更改您提供的代码。这是我的最后一个版本:

add_action( 'elementor/query/filter_expiration_date', function( $query ) {
        $today = date('Ymd');
        $meta_query = $query->get( 'meta_query' );
        $meta_query = [
            [       
            'key'       => 'date_dexpiration', 
            'value'     => $today,
            'type'      => 'DATE',
            'compare'   => '>=',
            ]
        ];
        $query->set( 'meta_query', $meta_query );
} );

当 ACF 字段被填满时它工作正常(对于过期和未过期的值),但当字段未填满或帖子不存在时不起作用。这些帖子不显示。

我试过了:

if( get_field('date_dexpiration') ) ...

但不起作用!

您是否知道如何保留第一个过滤器并为所有未填充的项目设置另一个过滤器。

再次感谢你。

于 2021-05-01T20:58:11.717 回答