wordpress 可以用这种方式定制 meta查询吗?

avkwfej4  于 2022-12-18  发布在  WordPress
关注(0)|答案(1)|浏览(172)

我有一个名为promotions的自定义帖子类型。
在每个促销的post meta中,我存储了两个字段,promo_start_datepromo_end_date
其想法是只在前端显示促销信息,

current_date >= promo_start_date AND current_date <= promo_end_date

例如,如果促销在promo_start_date中的值为2022-12-18,在promo_end_date中的值为2023-01-08,则它将仅显示在2022-12-18的前端,然后显示到2023-01-08
我想知道如何可能用 meta_query实现这一点。

$args = [
    'paged' => 1
    'post_type' => 'promotions',
    'posts_per_page' => 15,
    'meta_query' => [
        [
            'key' => 'promo_start_date',
            'value' => gmdate('Y-m-d'),
            'type' => 'DATE',
            'compare' => '>=',
        ],
        [
            'key' => 'promo_end_date',
            'value' => gmdate('Y-m-d'),
            'type' => 'DATE',
            'compare' => '<=',
        ],
    ],
];

我可以很容易地在原始sql中实现这一点,但不幸的是,我正在调整一个插件的过滤器,以达到我需要的结果。
滤波器来自Search and Filter plugin,其文档可在here中找到
这是我正在尝试实现的代码的一个示例

function me_sf_edit_query_args($query_args, $sfid) {
    // if search form has specified ID, change query args
    if ($sfid == 11000) {
        $query_args['meta_query'] = [
            [
                'key' => 'promo_start_date',
                'value' => gmdate('Y-m-d'),
                'type' => 'DATE',
                'compare' => '>=',
            ],
            [
                'key' => 'promo_end_date',
                'value' => gmdate('Y-m-d'),
                'type' => 'DATE',
                'compare' => '<=',
            ],
        ];
    }

    return $query_args;
}
add_filter('sf_edit_query_args', 'me_sf_edit_query_args', 20, 2);

谢谢

3xiyfsfu

3xiyfsfu1#

$today = current_time( 'Y-m-d' );
$args = [
    'paged' => 1,
    'post_type' => 'promotions',
    'posts_per_page' => 15,
    'meta_key'     => 'promo_start_date',
    'meta_value'   => $today,
    'meta_compare' => '>=',
    'meta_query' => [
        [
            'key' => 'promo_end_date',
            'value' => $today,
            'compare' => '<=',
        ],
    ],
];

相关问题