web-dev-qa-db-fra.com

Ajout de la classe 'current_post_item' à la publication en cours dans la boucle

J'utilise une boucle dans la barre latérale de mon site pour afficher tous les articles de cette catégorie. J'aimerais maintenant inclure une classe 'current_post' dans la publication en cours affichée pour styler cet élément dans la liste.

J'ai essayé de rechercher des balises conditionnelles ou cette fonction wp_list_post_types personnalisée mais les deux n'ont pas fonctionné. Est-ce que quelqu'un sait s'il y a un moyen de faire ça?

EDIT: Ajout de la boucle du commentaire ci-dessous

<?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; ?>
2
Squrler

Vous devriez pouvoir obtenir l'ID d'objet demandé et l'utiliser à des fins de comparaison dans votre boucle personnalisée.

Avant votre code de boucle existant (ce que vous avez posté ci-dessus), mais évidemment après la balise d'ouverture PHP.

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

Puis quelque part dans vos boucles WP personnalisées.

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

J'espère que cela pourra aider..

5
t31os

Si vous utilisez une boucle, vous devriez être capable de faire quelque chose comme ceci: cela n’a pas été testé, mais cela devrait fonctionner. Boucle pour la barre latérale

<?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": ""; ?>

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

Ceci n'est pas testé, donc je suppose que $post->ID obtiendra l'identifiant de la publication à l'extérieur et get_the_ID() l'ID de la publication à l'intérieur de la boucle. Si cela ne fonctionne pas, pouvez-vous poster votre code de boucle et je ferai un test

EDIT

Il y a quelques problèmes avec votre boucle. La première est qu’il s’agit de saisir la dernière catégorie. J'ai fait une recherche rapide sur Google et trouvé une âme qui semble fonctionner sur mon installation de test ici

Cela ne montrera que s’ils se trouvent sur une seule page de publication. Sinon, de mauvaises choses arrivent (double postage IE montrant 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>
1
Brooke.