通过带有日期的元值获取帖子

时间:2018-03-29 作者:ThalesAndrade

我有一个称为“议程”的帖子类型,它的元值之一是事件的日期。如何根据元值获取当年的帖子?

我尝试了上面的这个参数,但它不起作用。

$args = array(  \'post_type\' => \'agenda\',
                \'posts_per_page\' => -1,
                \'sort_order\' => \'asc\',
                \'meta_query\' => array(
                    array(
                        \'key\' => \'date_event\',
                        \'value\' => date(\'Y\'),
                        \'compare\' => \'=\',
                        \'type\' => \'DATETIME\'
                    )
                ),
                \'meta_key\' => \'date_event\',
                \'meta_type\' => \'DATE\',
                \'orderby\' => \'meta_value\',
                \'order\' => \'ASC\',
                \'tax_query\' => array(
                    array(
                    \'taxonomy\' => \'event_type\',
                    \'field\' => \'term_id\',
                    \'terms\' => $type_name)
                )
);

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

取决于您从“date\\u event”post meta字段返回的内容。

这可能是罪魁祸首——如果是一个月和一天的实际日期,它将与日期(“Y”)不匹配,而日期正好是“2018”。

您可以通过以下方式检查任何议程帖子的“date\\u event”中的值:

print\\u r(get\\u post\\u meta($post\\u id,“date\\u event”,true));

如果“date\\u event”中的值是一个Unix时间戳,那么实际上就很容易了,因为这样您就可以查询从当前年份的1月1日开始的所有日期,例如:

$first_of_year = strtotime( "1 January " . date( \'Y\' ) );

$args = array(  \'post_type\' => \'agenda\',
    \'posts_per_page\' => -1,
    \'meta_key\' => \'date_event\',
    \'orderby\' => \'meta_value_num\',
    \'order\' => \'ASC\',
    \'meta_query\' => array(
        array(
            \'key\' => \'date_event\',
            \'value\' => $first_of_year,
            \'compare\' => \'>=\',
        ).
    ),
    \'tax_query\' => array(
        array(
           \'taxonomy\' => \'event_type\',
           \'field\' => \'term_id\',
           \'terms\' => $type_name,
        )
    )
);
如果date\\u event给您一个像20180320这样的值,您可以做类似的事情,但是。。。

$first_of_year = date( \'Y\' ) . \'0101\';
如果您遇到类似“2018-03-29”的情况,此时您可能需要使用“type”=>“DATE”——但如果您有前两种情况之一,则不需要它。

还有一件事:“sort\\u order”不是一个有效的参数,尽管它将被忽略)。你只需要“订单”,反正你已经把它放低了。

Ans比较数值时,最佳做法是将“orderby”=>“meta\\u value”更改为“orderby”=>“meta\\u value\\u num”。

结束