自定义 wordpress 元查询(无结果)
Posted
技术标签:
【中文标题】自定义 wordpress 元查询(无结果)【英文标题】:Custom wordpress meta query (no result) 【发布时间】:2016-04-07 07:34:48 【问题描述】:问题
我在 Wordpress 中循环浏览自定义帖子类型(高级自定义字段)。我只想显示 start_date 等于 $newdate 变量的事件,在开头定义。
start_date 的格式为 YYYY-MM-DD HH:mm(与 $newdate 相同)。 $newdate 设置为一天的开始,因此我不会排除一天中不同时间的事件,并将比较设置为大于(只是为了测试查询)。
但是我没有得到任何结果。
<?php
$newdate = date('Y-m-d 00:00');
//<-- Start the Loop. -->!
$args = array(
'post_type' => 'epsa_events',
'posts_per_page' => 5,
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array (
array(
'key' => 'start_time',
'value' => $newdate,
'compare' => '>=',
'type' => 'datetime'
)
)
);
$loop = new WP_Query( $args );
【问题讨论】:
如果你的 start_time 是这种格式,那么它不是 datetime 而是 varchar。所以你将 2 个字符串与无法控制的结果进行比较。 你建议什么时间格式 【参考方案1】:试试这个查询:-
'meta_key' => 'event-start-date',
'meta_query' => array (
array(
'key' => 'start_time',
'value' => date('Ymd',strtotime($newdate)),
'compare' => '>=',
'type' => 'date'
)
)
【讨论】:
这个改动没有结果。 将类型日期时间更改为日期 你有没有得到这个工作,我也试图按小时范围过滤日期时间,但没有任何运气@rmilosic @NickeyK 抱歉,很久以前,不幸的是我似乎找不到源代码:/【参考方案2】:我猜你这里有一些小错误。
首先,如果您使用'orderby' => 'meta_value'
,则必须将'meta_key' => KEYVALUE
添加到您的$args
,其中KEYVALUE
是您要用于排序的自定义字段的名称。查看Order & Orderby Parameters 上的WP_Query
文档。
其次,假设您的start_date
字段类型是日期时间选择器,如果您想获取所有已经开始的事件,那么您使用了错误的比较运算符。因此,假设您还想按日期排序,您的 $args
代码应该是:
$args = array(
'post_type' => 'epsa_events',
'posts_per_page' => -1,
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_key' => 'start_time',
'meta_type' => 'DATETIME'
'meta_query' => array (
array(
'key' => 'start_time',
'compare' => '<=',
'value' => $newdate,
'type' => 'DATETIME'
)
)
);
看看 日期时间选择器 documentation 也是。
我希望这会有所帮助!
【讨论】:
以上是关于自定义 wordpress 元查询(无结果)的主要内容,如果未能解决你的问题,请参考以下文章
Wordpress 自定义 SQL 以获取三个具有给定元值的帖子
在 Wordpress 中发布帖子并根据自定义字段元填充字段时运行 SQL 函数
如何通过分类术语从自定义 WordPress MySQL 查询中排除结果