Wordpress: Como usar post_class () em um echo

2

Estou trabalhando em um loop foreach no Wordpress e quero adicionar 'post_class ()' a um div dentro dele. Atualmente, o código é assim:

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>';
}

A função 'post_class ()' está quebrando o div e chamando as classes como se estivessem contidas na página.

Alguma idéia?

    
por user2248612 14.07.2014 / 15:49

2 respostas

4

A solução tem sido menos complicada do que eu pensava inicialmente. A função post_class () não retorna uma string, mas sim "ecoa" a string. Portanto, quando você escreve.

echo '<div ' . post_class() . '>'; 

O efeito é o seguinte:

Primeiro, o sistema executa post_class (), gerando um "echo ...." com o atributo class segundo, o sistema faz a concatenação solicitada e ecoa o texto "".

O jeito certo de usá-lo é:

echo "<div ";
post_class();
echo ">";

ou então:

echo '<div class="'. join( ' ', get_post_class() ) .'">';
    
por user2248612 15.07.2014 / 11:56
3

A função post_class() é um wrapper para get_post_class() .

Lembre-se de que o último não é echo , mas retorna Array , então você precisa fazer algo parecido com o que post_class() faz:

$classes = join( '  ', get_post_class() );

Seu código (poderia) seria semelhante ao seguinte. Eu mudei também a if check para primeiro verificar se $posts está vazio e então verificar se é uma matriz - que é mais segura contra falhas.

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 )
    );
}
    
por kaiser 14.07.2014 / 16:29