Je travaille sur une boucle foreach dans Wordpress et souhaite ajouter "post_class ()" à une div en son sein. Actuellement, le code ressemble à ceci:
if ( is_array( $posts ) && !empty( $posts ) ) {
echo '<ul class="tribe-related-events tribe-clearfix hfeed vcalendar">';
foreach ( $posts as $post ) {
echo '<li>';
echo '<div class="overlay">';
echo '<div '. post_class() .'>';
echo '<h3>'. tribe_get_event_taxonomy() .'</h3>';
echo '</div>';
echo '</div>';
echo '</li>';
}
echo '</ul>';
}
La fonction 'post_class ()' casse le div dans lequel elle se trouve et appelle les classes comme si elles étaient contenues dans la page.
Des idées?
La solution a été moins compliquée que je ne le pensais au départ. La fonction post_class () ne renvoie pas de chaîne, mais "renvoie" la chaîne. Par conséquent, quand vous écrivez.
echo '<div ' . post_class() . '>';
L'effet est le suivant:
Tout d'abord, le système exécute post_class (), générant un "écho ..." avec l'attribut class. En second lieu, le système effectue la concaténation demandée et renvoie le texte "".
La bonne façon de l'utiliser est:
echo "<div ";
post_class();
echo ">";
ou sinon:
echo '<div class="'. join( ' ', get_post_class() ) .'">';
La fonction post_class()
est juste un wrapper pour get_post_class()
.
Gardez à l'esprit que ce dernier ne echo
, mais renvoie une Array
, vous devez donc faire quelque chose comme ce que post_class()
fait:
$classes = join( ' ', get_post_class() );
Votre code (pourrait) ressemblerait à ceci. J'ai également modifié la vérification if
pour vérifier d'abord si $posts
est vide, puis si c'est un tableau - ce qui est plus sûr.
if (
! empty( $posts )
AND is_array( $posts )
)
{
$items = array();
foreach ( $posts as $post )
$items[] = sprintf(
'<li><div class="overlay"><div class="%s"></div><h3>%s</h3></div></div></li>',
join( ' ', post_class() ),
tribe_get_event_taxonomy()
);
! empty( $items ) AND printf(
'<ul class="tribe-related-events tribe-clearfix hfeed vcalendar">%s</ul>',
join( '', $items )
);
}