【问题标题】:Wordpress : set a custom field in archive based on ACF dateWordpress:根据 ACF 日期在存档中设置自定义字段
【发布时间】:2021-07-24 16:34:41
【问题描述】:

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

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

我想在存档(使用 elementor 帖子小部件创建)中设置一个自定义过滤器,以隐藏日期为“date_dexpiration”

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”的字段

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

【问题讨论】:

    标签: wordpress filter advanced-custom-fields posts add-action


    【解决方案1】:

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

    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') ) ...
    

    但不起作用!

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

    再次感谢您。

    【讨论】:

    • $meta_query = [ relation' => 'OR', [ 'key' => 'date_dexpiration', 'value' => $today, 'type' => 'DATE', 'compare' => '>=', ], [ 'key' => 'date_dexpiration', 'compare' => 'NOT EXISTS', ], [ 'key' => 'date_dexpiration', 'value' => '', ], ]; 呢?
    【解决方案2】:

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

    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 );
    } );
    

    【讨论】:

    • @Bruno Bros 我的回答有帮助吗?
    猜你喜欢
    • 2022-10-17
    • 2018-10-02
    • 1970-01-01
    • 2017-02-01
    • 2021-10-14
    • 2016-11-27
    • 2021-07-30
    • 2017-07-06
    • 2019-04-11
    相关资源
    最近更新 更多