如何根据日期'meta_value'查询帖子并使用'orderby'属性在循环中排序帖子?
问题描述:
我正在为一家剧院公司创建一个网站,并且我正在创建所有过去,现在和未来作品的索引。我希望索引'orderby'每个生产的结束日期(ACF'日期'字段类型;'ending_date')。如何根据日期'meta_value'查询帖子并使用'orderby'属性在循环中排序帖子?
这里是我的查询的示例:
<?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排序themselevs,而是选择按默认,发布日期排序。
我确定我缺少一些简单的东西。
任何人有任何想法?
答
对于日期格式YYYYMMDD
可以spicify数据类型在
orderby
键像meta_value_*
可能的值是 'NUMERIC', 'BINARY', 'CHAR', '日期', 'DATETIME', '十进制', '签名',“ 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
格式,如果您在不同的日期格式,那么你必须在创建自定义过滤函数钩子到posts_orderby
过滤器与STR_TO_DATE
MySQL函数。
对于日期格式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',
);
的代码进行测试,功能齐全。
参考:
希望这有助于。
试试吧。问题依然存在。 :( 任何其他想法? –
你使用的是什么日期格式?它是'YYYY-MM-DD'吗? –
我得到它返回YYYYMMDD,以便它出来作为一个8位数字。即2017年1月1日返回:20170101. –