web-dev-qa-db-ja.com

日付による高度なカスタムフィールドソートリピーター

私はページテンプレートのリピーターフィールドを持っていて、日付でソートされる必要があるリンク付きの小さな断片(最近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);
?>
1
James B

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は奇妙な日付フォーマットです。

2
s1lv3r