Php 如何查询帖子并使用';订购人';属性,用于根据日期';元值';?
我正在为一家戏剧公司创建一个网站,我正在创建一个所有过去、现在和未来作品的索引。我希望索引“orderby”是每个生产的结束日期(ACF“date”字段类型;“ending_date”) 以下是我的查询示例:Php 如何查询帖子并使用';订购人';属性,用于根据日期';元值';?,php,arrays,wordpress,meta-key,Php,Arrays,Wordpress,Meta Key,我正在为一家戏剧公司创建一个网站,我正在创建一个所有过去、现在和未来作品的索引。我希望索引“orderby”是每个生产的结束日期(ACF“date”字段类型;“ending_date”) 以下是我的查询示例: <?php $futureProd = array( 'post_type' => 'productions', 'posts_per_page' => -1, 'meta_key' => 'ending_date', 'orderb
<?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',
);
?>
及
不管我怎么做,帖子都拒绝按meta_值排序,而是选择按默认的post date排序
我肯定我错过了一些简单的东西
有人有什么想法吗
您可以像meta\u value.*
可能的值为“数值”、“二进制”、“字符”、“日期”、“日期时间”,
“十进制”、“有符号”、“时间”、“无符号”
试试这个
$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
格式。如果日期设置为不同格式,则必须创建自定义筛选函数挂钩,以便使用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_查询参数应该如下所示:
$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。@JamieCavanagh:我已更新了我的答案。请阅读注释部分,您必须使用下的代码作为日期格式yyyyymmdd
部分。Thank you@RaunakGupta you真是太棒了。有数千篇文章的元字段格式错误。看到此评论的每个人都必须知道,这是我在互联网上找到的唯一完整答案,所以请放弃投票:)
$futureProd = array(
'post_type' => 'productions',
'posts_per_page' => -1,
'meta_key' => 'ending_date',
'orderby' => 'yyyymmdd_date_format', //added custom orderby key
'order' => 'ASC',
);