我有一系列帖子,日期位于自定义字段中,例如:
02/12/1978
01/11/1987
这些是实际的字符串,而不是日期。
然后,我运行以下命令,在其中尝试按日期排序,并附加每个日期的帖子ID,以使它们运行已排序的帖子:
$dateOrdered = [];
while ( $queryPosts->have_posts() ) : $queryPosts->the_post();
$id = $post->ID;
$date = usp_get_meta(false, 'usp-custom-80');
array_push($postOrdered, $id);
$dateOrdered[] = array("date"=>$date, "id"=>$id);
endwhile;
endif;
function custom_sort_dt($b, $a) {
return strtotime($a['date']) - strtotime($b['date']);
}
usort($dateOrdered, "custom_sort_dt");
$dateOrdered = implode(',', array_column($dateOrdered, 'id'));
但这显示的日期没有排序。
答案 0 :(得分:0)
假设您有某种类型的“ Post”类,例如
2GB
并将它们保存在名为class Post {
public $date;
}
的数组中,可以执行以下代码:
$posts
,并具有排序的$ dates数组。这些值是unix时间戳。
修改:
日期的格式为dd-mm-yyyy,因此我们需要使用“ d-m-yy”。
我们还需要通过在其前面添加一个\来完全限定DateTime。
$dates = array_map(function($p) { return DateTime::createFromFormat('d/m/yy', $p->date)->getTimestamp(); }, $posts);
asort($dates);
回显帖子内容,然后使用
$postOrdered[] = [];
while ($queryPosts->have_posts()) {
$queryPosts->the_post();
$id = get_the_ID();
$postOrdered[$id] = \DateTime::createFromFormat('d-m-yy', usp_get_meta(false,'usp-custom-80'))->getTimestamp();
}
asort($postOrdered);
$ids = array_keys($postOrdered)