Wordpress: cómo usar post_class () en un eco

2

Estoy trabajando en un bucle foreach en Wordpress y quiero agregar 'post_class ()' a un div dentro de él. Actualmente el código se ve así:

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 función 'post_class ()' está rompiendo el div en el que está y llama a las clases como si estuvieran en la página.

¿Alguna idea?

    
pregunta user2248612 14.07.2014 - 15:49

2 respuestas

4

La solución en realidad ha sido menos complicada de lo que inicialmente pensé. La función post_class () no devuelve una cadena, sino que "hace eco" de la cadena. Por lo tanto, cuando escribes.

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

El efecto es el siguiente:

Primero, el sistema ejecuta post_class (), generando un "eco ...." con el atributo de clase segundo, el sistema realiza la concatenación solicitada y se hace eco del texto "".

La forma correcta de usarlo es:

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

o bien:

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

La función post_class() simplemente está un contenedor para get_post_class() .

Ten en cuenta que este último no hace echo , sino que devuelve un Array , así que debes hacer algo como lo que post_class() hace:

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

Tu código (podría) se vería como el siguiente. También cambié el if check para primero verificar si $posts está vacío y luego verificar si es una matriz, que es más segura.

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

Lea otras preguntas en las etiquetas