根据自定义字段中的日期过滤查询

时间:2015-02-04 作者:mistertaylor

我有一个自定义的帖子类型jobs 和带有键的自定义字段expiry-date 用户输入日期后,帖子将不再显示。

这是我目前的代码。。。

$loop = new WP_Query( array(
            \'post_type\' => \'jobs\',
            \'posts_per_page\' => -1,
            \'order\' => \'ASC\',
            \'orderby\' => \'date\',
            \'meta_query\' => array (
                \'key\' => \'expiry-date\',
                \'value\' => date(\'d/m/Y\',strtotime("today")),
                \'type\' => \'DATE\',
                \'compare\' => \'>=\'
            )
        ));

if (have_posts()) : while ($loop->have_posts()) : $loop->the_post();
    [display content]
endwhile; else:
    [display "no vacancies" message]
endif;
中的日期expiry-date 以dd/mm/yyyy格式存储(尽管有些帖子可能会将此字段设置为空)。我只想返回过期日期大于今天日期(或未设置日期)的查询中的帖子-我尝试了各种values和compare 类型我缺少什么?

<小时>EDITED TO ADD SOLUTION:

在函数中的函数中。php保存元数据,我创建了一个额外的自定义字段expiry-date-formatted 以正确的格式存储日期,如果未设置日期,则将值设置为“true”:

update_post_meta($post_id, \'expiry-date\', $date);
if (!empty($date)) {
    update_post_meta($post_id, \'expiry-date-formatted\', date(\'Y-m-d\', strtotime($date)) );
} else {
    update_post_meta($post_id, \'expiry-date-formatted\', \'true\' );
}
然后更新meta\\u查询:

\'meta_query\' => array(
                \'relation\' => \'OR\',
                array(
                    \'key\'       => \'expiry-date-formatted\',
                    \'value\'     => date(\'Y-m-d\',strtotime("today")),
                    \'compare\'   => \'>=\',
                    \'type\'      => \'DATE\'
                ),
                array(
                    \'key\'       => \'expiry-date-formatted\',
                    \'value\'     => \'true\',
                    \'compare\'   => \'=\'
                )
            )
此外,我将jQuery UI datepicker的输入格式化为“2015年2月5日”,以避免混淆。

jQuery(function($) {
    $( "#ce-job-expiry-date" ).datepicker({ dateFormat: \'dd M yy\' });
});

2 个回复
最合适的回答,由SO网友:mistertaylor 整理而成

在函数中的函数中。php保存元数据,我创建了一个额外的自定义字段expiry-date-formatted 以正确的格式存储日期,如果未设置日期,则将值设置为“true”:

update_post_meta($post_id, \'expiry-date\', $date);
if (!empty($date)) {
    update_post_meta($post_id, \'expiry-date-formatted\', date(\'Y-m-d\', strtotime($date)) );
} else {
    update_post_meta($post_id, \'expiry-date-formatted\', \'true\' );
}
然后更新meta\\u查询:

\'meta_query\' => array(
                \'relation\' => \'OR\',
                array(
                    \'key\'       => \'expiry-date-formatted\',
                    \'value\'     => date(\'Y-m-d\',strtotime("today")),
                    \'compare\'   => \'>=\',
                    \'type\'      => \'DATE\'
                ),
                array(
                    \'key\'       => \'expiry-date-formatted\',
                    \'value\'     => \'true\',
                    \'compare\'   => \'=\'
                )
            )
此外,我将jQuery UI datepicker的输入格式化为“2015年2月5日”,以避免混淆。

jQuery(function($) {
    $( "#ce-job-expiry-date" ).datepicker({ dateFormat: \'dd M yy\' });
});

SO网友:Bysander

您可以使用以下格式meta_query, 虽然您必须更改所有现有expiry-date 条目。

\'meta_query\' => array(
    \'key\' => \'expiry-date\',
    \'value\' => array($today, $UserInputExpiry),
    \'compare\' => \'BETWEEN\',
    \'type\' => \'DATE\'
)
数组中的第二个日期是较晚的日期,两者都是$today$UserInputExpiry 应采用以下格式YYYY-MM-DD.

结束

相关推荐