j'ai donc écrit le shortcode ci-dessous qui affiche une liste de messages personnalisés. Quand je répète les valeurs, cela fonctionne bien. Mais lorsque je le fais d'une manière légèrement différente et que je joins des variables, ce n'est pas le cas. Cela n'a pas vraiment d'importance mais j'aimerais maintenant savoir pourquoi.
Cela fonctionne bien.
function post_events($atts) {
global $post;
$args = array(
'post_type' => 'event',
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'ASC',
);
$posts = get_posts($args);
$posts_chunks = array_chunk($posts, 2);
foreach ($posts_chunks as $row) {
echo '<div class="row">';
foreach ($row as $post) {
setup_postdata($post);
echo '<div class="col-md-6 event-item">';
echo '<a href="' .get_the_permalink(). '">' .get_the_post_thumbnail(). '</a>';
echo '<div class="event-item-text">';
echo '<h3><a href="'.get_the_permalink(). '">' .get_the_title(). '</a></h3>';
echo '<span class="event-date">' .get_the_date("Y-m-d"). '</span>';
echo '<p>' .wp_trim_words( get_the_content(), 40, '...' ). '</p>';
echo '</div>';
echo '</div>';
}
echo '</div>';
}
}
add_shortcode('post_events','post_events');
Pour une raison quelconque, cela ne sort que le premier message ...
function post_events($atts) {
global $post;
$args = array(
'post_type' => 'event',
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'ASC',
);
$posts = get_posts($args);
$posts_chunks = array_chunk($posts, 2);
foreach ($posts_chunks as $row) {
echo '<div class="row">';
foreach ($row as $post) {
setup_postdata($post);
$output = '<div class="col-md-6 event-item">';
$output .= '<a href="' .get_the_permalink(). '">' .get_the_post_thumbnail(). '</a>';
$output .= '<div class="event-item-text">';
$output .= '<h3><a href="'.get_the_permalink(). '">' .get_the_title(). '</a></h3>';
$output .= '<span class="event-date">' .get_the_date("Y-m-d"). '</span>';
$output .= '<p>' .wp_trim_words( get_the_content(), 40, '...' ). '</p>';
$output .= '</div>';
$output .= '</div>';
return $output;
}
echo '</div>';
}
}
add_shortcode('post_events','post_events');
Vous réinitialisez la valeur de $output
chaque fois que vous parcourez la boucle:
foreach ($row as $post) {
// etc.
$output = '<div class="col-md-6 event-item">'; // Here $output
// etc.
}
Cette affectation $output
réinitialise la valeur de $output
à '<div class="col-md-6 event-item">'
, en supprimant tout ce qui lui avait été ajouté.
Vous retournez également $output
à la fin de la première boucle:
foreach ($row as $post) {
// etc.
return $output;
}
Cela arrête toute la fonction et renvoie la valeur actuelle de $output
, qui ne sera que le premier message à ce moment-là.
Vous devez déclarer $output
en dehors des boucles (les deux), puis ajouter uniquement à partir de ce point et revenir après la fin des boucles:
function post_events($atts) {
global $post;
$args = array(
'post_type' => 'event',
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'ASC',
);
$posts = get_posts($args);
$posts_chunks = array_chunk($posts, 2);
$output = '';
foreach ($posts_chunks as $row) {
$output .= '<div class="row">';
foreach ($row as $post) {
setup_postdata($post);
$output .= '<div class="col-md-6 event-item">';
$output .= '<a href="' .get_the_permalink(). '">' .get_the_post_thumbnail(). '</a>';
$output .= '<div class="event-item-text">';
$output .= '<h3><a href="'.get_the_permalink(). '">' .get_the_title(). '</a></h3>';
$output .= '<span class="event-date">' .get_the_date("Y-m-d"). '</span>';
$output .= '<p>' .wp_trim_words( get_the_content(), 40, '...' ). '</p>';
$output .= '</div>';
$output .= '</div>';
}
$output .= '</div>';
}
return $output;
}
add_shortcode('post_events','post_events');