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);
?>
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.