wordpress Wp_query和元查询问题与日期字段

时间:2019-04-01 10:45:13

标签: php mysql wordpress meta-query

我在WordPress数据库中将项目插入为帖子。当前在我家中,显示最近发布的3个项目。现在,我的目的是我要比上次发布的项目首先显示今天到期的项目。

例如,今天有2个项目到期,而在主页上它将显示2个项目今天到期和1个项目最后发布。这意味着总共将显示3个项目。

请在WP_query下面检查,该查询仅返回上次发布的项目

$args = array('post_type' => 'ignition_product', 'posts_per_page' => $project_count, 'paged' => $paged);

$newargs = apply_filters('project_query', $args);
$wp_query = new WP_Query($newargs);

以下查询我尝试使用元键和值,但没有运气。 “ ign_fund_end”以字符串形式存储日期,所以我认为这就是为什么不比较日期的原因。 我的最终目标是如上所述,总共应显示3个项目。首先应该是今天到期,然后应该是最后一次发布。

$args = array(
        'post_type' => 'ignition_product',
        'posts_per_page' => $project_count,
        'paged' => $paged,        
        'meta_query' => array(// WordPress has all the results, now, return only the events after today's date
            array(
                'key' => 'ign_fund_end', // Check the start date field
                'value' => date('m/d/Y'), // Set today's date (note the similar format)
                'compare' => '>=', // Return the ones greater than today's date
                'type' => 'DATE' // Let WordPress know we're working with date
            )
    ));

请检查下图以供参考。 enter image description here

任何解决方案表示赞赏。

2 个答案:

答案 0 :(得分:0)

您只需要从数组参数中删除type

$args = array(
        'post_type' => 'ignition_product',
        'posts_per_page' => $project_count,
        'paged' => $paged,        
        'meta_query' => array(// WordPress has all the results, now, return only the events after today's date
            array(
                'key' => 'ign_fund_end', // Check the start date field
                'value' => date('m/d/Y'), // Set today's date (note the similar format)
                'compare' => '>=', // Return the ones greater than today's date
                'type' => 'DATE' // Let WordPress know we're working with date
            )
    ));

收件人:

$args = array(
        'post_type' => 'ignition_product',
        'posts_per_page' => $project_count,
        'paged' => $paged,        
        'meta_query' => array(// WordPress has all the results, now, return only the events after today's date
            array(
                'key' => 'ign_fund_end', // Check the start date field
                'value' => date('m/d/Y'), // Set today's date (note the similar format)
                'compare' => '>=', // Return the ones greater than today's date
                //'type' => 'DATE' // Let WordPress know we're working with date
            )
    ));

注意:原因是表meta_value中的类型不是DATE

在PHPMyAdmin中,默认日期类型为:

2019-04-16

答案 1 :(得分:0)

由于您的自定义字段ign_fund_end不是MySQL日期兼容格式,因此这是WP_Query无法按预期方式工作的主要原因。我的建议是使用save_post在自定义字段中保存结束日期的时间戳,然后将$args的{​​{1}}更改为在该字段上工作。

以下是您问题的完整解决方案:

1:在“自定义”字段中保存时间戳记

WP_Query

2:修改add_action( 'save_post', function( $post_id ) { if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; if ( $parent_id = wp_is_post_revision( $post_id ) ) { $post_id = $parent_id; } if( isset( $_POST['ign_fund_end'] ) && !empty($_POST['ign_fund_end']) ) { $end_date = $_POST['ign_fund_end']; $end_date = strtotime($end_date); update_post_meta( $post_id, '__end_date', $end_date ); } } );

$args