私はページテンプレートのリピーターフィールドを持っていて、日付でソートされる必要があるリンク付きの小さな断片(最近1日)を表示しています。現在のコードを使用していますが、並べ替えは行われていません。
<?php if(get_field('in_the_news')): ?>
<?php while(has_sub_field('in_the_news')): ?>
<article id="post-<?php the_ID(); ?>" class="open post type-post format-standard hentry" role="article">
<header class="article-header">
<h1 class="h2" style="font-size:16px;"><a href="<?php the_sub_field('link'); ?>" rel="bookmark" target="_blank"><?php the_sub_field('title'); ?></a></h1>
<p class="byline vcard"><?php the_sub_field('publisher'); ?> -
<?php
//the_sub_field('published_date');
/*if(get_sub_field('published_date'))
{
$date = DateTime::createFromFormat('Ymd', get_sub_field('published_date'));
echo 'Published: ';
echo $date->format('F j, Y');
}*/
?>
<?php
//NO PHP 5.3 support. this instead.
$date = get_sub_field('published_date');
// $date = 19881123 (23/11/1988)
// extract Y,M,D
$y = substr($date, 0, 4);
$m = substr($date, 4, 2);
$d = substr($date, 6, 2);
// create UNIX
$time = strtotime("{$d}-{$m}-{$y}");
// format date (23/11/1988)
echo date('d/m/Y', $time);
?>
ACFが提供するAPI関数ではこれは不可能だと思います。最初に一時的な配列に値を保存してから、phpを使って配列内の値をソートします(たとえば krsort() を使用)。
このようなもの(アイデアを与えるためだけに):
while(has_sub_field('in_the_news')) {
$date = get_sub_field('published_date');
// $date = 19881123 (23/11/1988)
// extract Y,M,D
$y = substr($date, 0, 4);
$m = substr($date, 4, 2);
$d = substr($date, 6, 2);
// create UNIX
$time = strtotime("{$d}-{$m}-{$y}");
$tmp_array[$time] = array(
'link' => get_sub_field('link'),
'title' => get_sub_field('title'),
'publisher' => get_sub_field('publisher'),
'date' => date('d/m/Y', $time)
);
}
krsort($tmp_array);
foreach($tmp_array as $entry ) {
// your html ...
}
シモンズ:どういうわけか可能であれば、最初から適切なフォーマット(すなわち、unixタイムスタンプ)でタイムスタンプを保存することは常により良いです。 19881123
は奇妙な日付フォーマットです。