Agregar la clase 'current_post_item' a la publicación actual en el bucle

2

Estoy usando un bucle en la barra lateral de mi sitio para mostrar todas las publicaciones que se encuentran en esa categoría. Ahora me gustaría incluir una clase 'current_post' en la publicación actual que se muestra para dar estilo a ese elemento en la lista.

He intentado buscar etiquetas condicionales o esta personalizada wp_list_post_types function pero ambos no han funcionado. ¿Alguien sabe si hay una manera de hacer esto?

EDITAR: agregar bucle del comentario a continuación

<?php foreach((get_the_category()) as $category) { 
$postcat= $category->cat_ID; 
$catname =$category->cat_name; } 
$args = array( 'cat' => $postcat ); 
$my_query = new WP_Query(); 
$my_query->query($args); // Equivalent of query_posts()

while($my_query->have_posts()) : $my_query->the_post(); 
$id=get_the_ID();   
$currentClass= ($post->ID == $id) ? "current_post": ""; ?>
<a class="<?php echo   $currentClass; ?>" href="<?php the_permalink();?>">ni</a> 
<?php endwhile; ?>
    
pregunta Squrler 12.04.2011 - 02:26

2 respuestas

5

Debería poder obtener el ID del objeto consultado y usarlo para realizar comparaciones dentro de su bucle personalizado.

Antes de su código de bucle existente (lo que ha publicado anteriormente), pero obviamente después de la etiqueta PHP de apertura ...

global $wp_query;
$current_id = $wp_query->get_queried_object_id();

Luego, en algún lugar dentro de tus bucles WP personalizados ...

if( $current_id == get_the_ID() ) {
    // This result is the current one
}
else {
    // Not current
}

Espero que ayude ..

    
respondido por el t31os 13.04.2011 - 12:14
1

Si está utilizando un bucle, debería poder hacer algo como esto: no está probado, pero debería funcionar. Bucle para la barra lateral

<?php if ( have_posts() ) : while( have_posts() ): the_post(); ?>
<?php while( have_posts() ): the_post(); ?>
<?php while( have_posts() ){ 
 $id=get_the_ID();
 $currentClass= ($post->ID == $id) ? "current_post": ""; ?>

Entonces,
<div class="post <?php echo $currentClass; ?>">.....

Esto no se ha probado, por lo que supongo que $post->ID obtendrá el ID de la publicación externa y get_the_ID() obtendrá la ID de la publicación dentro del bucle. Si eso no funciona, puedes publicar tu código de bucle y haré algunas pruebas

EDIT

Hay algunos problemas con tu bucle. Una es que solo está agarrando la última categoría. Hice una búsqueda rápida en Google y encontré un alma que parece funcionar en mi instalación de prueba here

Esto solo se mostrará si están en una página de publicación única. De lo contrario, sucederán cosas malas (publicación duplicada de IE, etc.)

    <ul>
<?php
$IDOutsideLoop = $post->ID;
while( have_posts() ) {
    the_post();
if(is_single()){
    foreach( ( get_the_category() ) as $category )
        $my_query = new WP_Query('category_name=' . $category->category_nicename . '&orderby=title&order=asc&showposts=100');
    if( $my_query ) {
        while ( $my_query->have_posts() ) {
            $my_query->the_post(); 
                        $currentClass=( is_single() && $IDOutsideLoop == $post->ID ) ? ' class="current_post"' : '';                    ?>
            <li>
                <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" <?php echo $currentClass ?>><?php the_title(); ?></a>
            </li>
<?php
        }
    }
}
}
?>
</ul>
    
respondido por el BandonRandon 12.04.2011 - 03:23

Lea otras preguntas en las etiquetas