web-dev-qa-db-fra.com

Les champs personnalisés avancés trient le répéteur par date

J'ai un champ répéteur sur un modèle de page pour afficher de petits extraits avec un lien qui doit être trié par date (récent 1er). J'utilise le code actuel, mais il n'y a pas de tri en place.

        <?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

Je pense que cela n’est pas possible avec les fonctions API fournies par ACF. Je voudrais d'abord enregistrer les valeurs dans un tableau temporaire, puis trier les valeurs à l'intérieur du tableau avec php (avec krsort () par exemple).

Quelque chose comme ça (juste pour donner une idée):

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 ...
}

PS: Il est toujours préférable de sauvegarder les horodatages dans un format approprié (c’est-à-dire un horodatage Unix) en premier lieu, si possible. 19881123 est un format de date étrange.

2
s1lv3r