【发布时间】:2018-04-25 16:24:26
【问题描述】:
我有自定义的帖子类型事件,其中包含自定义字段 event_date。该字段的日期格式设置为 Ymd。
我正在尝试按 event_date 的顺序获取帖子
这是按顺序拉出帖子的代码
$today = date('Ymd');
$args = array (
'post_type' => array( 'event' ),
'posts_per_page' => '-1',
'order' => 'ASC',
'orderby' =>'meta_value', // also tried having meta_value_num but that didn't worked as well
'meta_key' =>'event_date',
'meta_query' => array(
array(
'key' => 'event_date',
'compare' => '>=',
'value' => $today,
)
),
'suppress_filters' => true
);
/*
global $wp_filter;
var_dump( $wp_filter['posts_orderby'] );die;
This returns NULL as well
*/
$query = new WP_Query( $args );
echo '<pre>';
var_dump($query->request);die;
但是 $query->request 将 ORDER BY 显示为 post_date 而不是我提供的查询。 这是请求的转储
string(681) "SELECT wp_posts.* FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) INNER JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1 AND (
wp_posts.ID NOT IN (
SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN (11)
)
) AND (
wp_postmeta.meta_key = 'event_date'
AND
(
( mt1.meta_key = 'event_date' AND mt1.meta_value >= '20171113' )
)
) AND wp_posts.post_type = 'event' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'acf-disabled' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date ASC "
无法在 event_date 之前订购。 我究竟做错了什么?? 甚至尝试过
remove_all_filters('posts_orderby');
在 wp_query 之前还是一样的结果。
最后:感谢大家的友好回复,最终通过将我的查询中的 order_by 更改为 orderby 来解决。 感谢@Prasanna Venkatesh 让我签入 phpmyadmin。在 phpmyadmin 中运行代码并修复它。 PS:除了order_by之外,sql查询都是正确的。
【问题讨论】:
-
您按 ORDER BY wp_posts.post_date ASC 订购。对吗?
-
我没用过,我使用的是 meta_value 的 order by,但是请求将 order by 返回到 post_date。
-
试试这个 ORDER BY wp_posts.event_date ASC
-
我这里没有使用 SQL 查询,我使用的是 wp_query 并且使用了相同的 order_by =>'event_date'。
-
我认为 wp_posts.meta_value 应该是 wp_postmeta.value 仍然您的查询不正确。复制您的查询并直接在 phpmyadmin 中检查它
标签: php wordpress advanced-custom-fields