我正在为剧院公司创建一个网站,我正在创建所有过去,现在和未来制作的索引.我希望索引’orderby’每个生产的结束日期(ACF’日期’字段类型;’ending_date’).
这是我的查询示例:
<?PHP
$futureProd = array(
'post_type' => 'productions',
'posts_per_page' => -1,
'Meta_key' => 'ending_date',
'orderby' => 'Meta_value',
'order' => 'ASC',
);
$slider_posts = new WP_Query($futureProd);
$array_rev = array_reverse($slider_posts->posts);
$slider_posts->posts = $array_rev;
?>
还尝试了以下内容,添加’Meta_value_date’以及’Meta_value_num’替代方案:
<?PHP // query posts
$futureProd = array(
'post_type' => 'productions',
'posts_per_page' => -1,
'Meta_key' => 'ending_date',
'orderby' => 'Meta_value_date',
'order' => 'ASC',
);
?>
和
<?PHP // query posts
$futureProd = array(
'post_type' => 'productions',
'posts_per_page' => -1,
'Meta_key' => 'ending_date',
'orderby' => 'Meta_value_num',
'order' => 'ASC',
);
?>
无论我尝试什么,帖子都拒绝通过Meta_value来订购它们,而是选择通过默认的发布日期来订购自己.
我确定我错过了一些简单的事情.
有人有想法么?
解决方法:
You can spicify the datatype in
orderby
key likeMeta_value_*
possible values are ‘NUMERIC’, ‘BINARY’, ‘CHAR’, ‘DATE’, ‘DATETIME’,
‘DECIMAL’, ‘SIGNED’, ‘TIME’, ‘UNSIGNED’.
尝试这个,
$futureProd = array(
'post_type' => 'productions',
'posts_per_page' => -1,
'Meta_key' => 'ending_date',
'orderby' => 'Meta_value_date',
'order' => 'ASC',
);
$slider_posts = new WP_Query($futureProd);
请注意:要使上面的代码工作,你需要有YYYY-MM-DD格式的日期,如果你有不同格式的日期,那么你必须使用STR_TO_DATE
MysqL函数创建自定义过滤器函数钩到posts_orderby
过滤器.
对于日期格式YYYYMMDD
将其添加到活动子主题(或主题)的活动主题function.PHP文件中.或者也可以在任何插件PHP文件中.
function text_domain_posts_orderby($orderby, $query) {
//Only for custom orderby key
if ($query->get('orderby') != 'yyyymmdd_date_format')
return $orderby;
if (!( $order = $query->get('order') ))
$order = 'ASC';
global $wpdb;
$fieldName = $wpdb->postMeta . '.Meta_value';
return "STR_TO_DATE(" . $fieldName . ", '%Y%m%d') " . $order;
}
add_filter('posts_orderby', 'text_domain_posts_orderby', 10, 2);
所以现在你的WP_Query参数应该是这样的:
$futureProd = array(
'post_type' => 'productions',
'posts_per_page' => -1,
'Meta_key' => 'ending_date',
'orderby' => 'yyyymmdd_date_format', //added custom orderby key
'order' => 'ASC',
);
参考:
> WP_Query Order & Orderby Parameters
> MySQL ORDER BY Date field which is not in date format
希望这可以帮助.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。