web-dev-qa-db-fra.com

Wordpress: Comment utiliser post_class () dans un echo

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?

2
user2248612

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() ) .'">';
4
user2248612

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 )
    );
}
3
kaiser