具有简单字段的自定义查询对象-自定义日期字段

时间:2012-10-25 作者:jklina

我目前正在使用simple-fields plugin 添加事件开始日期字段的步骤date 类型字段设置为称为“事件”的自定义帖子类型。在我的主页上,我希望显示与今天日期最近的三个事件,它们都没有超过今天的日期。

我目前拥有:

$recent_events = new WP_Query(array(\'post_type\' => \'phelps_event\', \'posts_per_page\' => 3, \'order\' => \'DESC\'));

但这只给出了前3个事件的创建顺序。我不确定如何根据使用简单字段插件创建的日期字段进行过滤。

感谢您的关注!

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

正如米洛所说,简单字段目前以一种非首选的方式存储日期。

我现在可以想出两种方法来解决这个问题:

第一:使用sql“手动”获取帖子,并使用mysql函数substr将日期重新设置为可以排序的有效格式。有点麻烦,但可以。

SQL查询类似于:

SELECT 
post_id,
DATE_FORMAT(concat(substr(_your_date_meta_key, 7, 4), "-",substr(_your_date_meta_key, 4,     2),"-",substr(_your_date_meta_key, 1, 2)), \'%Y %b %D\') as theDate
from wp_postmeta
where meta_key = "_your_date_meta_key"
order by theDate
您将获得post ID作为回报,然后您可以使用get\\u post()或类似的方法获取这些ID。

第二:使用wp\\u query(正如您已经做的那样)获取所有帖子,然后在PHP中使用usort()对它们进行排序。这取决于你有多少帖子,可以很好地工作。

(三:等几天,让我更新简单字段,支持将日期存储为unixdates,因为这样更有意义!)

SO网友:Milo

如果您使用插件的日期选择器,很遗憾,它输入的日期格式很难按日期查询。日期应为格式yyyy-mm-dd, 插件向后保存-dd-mm-yyyy 这导致了一些奇怪的事情,比如1960年9月26日发生在2012年10月25日之后。

如果可以以某种方式反转日期格式(这可能是插件开发人员的一个问题),则只需获取保存日期的元键即可。在简单字段中,通过单击Show custom field keys 编辑帖子时,其外观如下:

Meta key: _simple_fields_fieldGroupID_1_fieldID_1_numInSet_0
作为替代方案,我建议使用this meta box class 相反,它具有可配置的日期格式。

也就是说,要按自定义字段日期进行查询,您需要执行meta query 在按键上,日期保存在:

$today = date(\'Y-m-d\');
$args = array(
    \'posts_per_page\' => 3,
    \'meta_key\' => \'_your_date_meta_key\',
    \'meta_value\' => $today,
    \'meta_compare\' => \'>=\',
    \'orderby\' => \'meta_value\',
    \'order\' => \'ASC\'
);
query_posts( $args );

结束

相关推荐

为WP_QUERY()注册自定义查询参数

我写了一个插件,它可以在自己的数据库表中存储每个帖子(产品)的技术规格表。对于站点的搜索功能,我想向传递给的数组添加一个自定义参数WP_Query().我不知道在哪里注册这个自定义参数,以便插件尽快处理它WP_Query() 执行搜索。插件中是否有一个钩子可以用来限制WP_Query() 到与给定规格匹配的特定集合?还是最终必须使用SQL构建整个查询?请参见以下示例:“标准”-参数旁边有一个自定义参数_spec 我希望插件以某种方式解析它的值。<?php new WP_Query(