it-swarm.com.de

Hinzufügen der Klasse 'current_post_item' zum aktuellen Beitrag in der Schleife

Ich verwende eine Schleife in der Seitenleiste meiner Website, um alle Beiträge in dieser Kategorie anzuzeigen. Jetzt möchte ich dem aktuellen Beitrag, der angezeigt wird, eine Klasse 'current_post' hinzufügen, um das Element in der Liste zu formatieren.

Ich habe versucht, nach bedingten Tags oder dieser benutzerdefinierten Funktion wp_list_post_types zu suchen, aber beide haben nicht funktioniert. Weiß jemand, ob es einen Weg gibt, dies zu tun?

BEARBEITEN: Hinzufügen einer Schleife aus dem Kommentar unten

<?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

Sie sollten in der Lage sein, die abgefragte Objekt-ID abzurufen und diese zum Vergleich in Ihrer benutzerdefinierten Schleife zu verwenden.

Vor Ihrem bestehenden Loop Code (was Sie oben gepostet haben), aber offensichtlich nach dem öffnenden PHP Tag.

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

Dann irgendwo in Ihren benutzerdefinierten WP Schleifen ..

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

Hoffentlich hilft das..

5
t31os

Wenn Sie eine Schleife verwenden, sollten Sie in der Lage sein, so etwas zu tun, es ist ungetestet, sollte aber funktionieren. Schleife für Sidebar

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

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

Dies wird nicht getestet, also gehe ich einfach davon aus, dass $post->ID die ID des Posts außerhalb und get_the_ID() die ID des Posts innerhalb der Schleife erhält. Wenn das nicht funktioniert, kannst du deinen Loop-Code posten und ich werde einen Test machen

EDIT

Es gibt einige Probleme mit Ihrer Schleife. Eine ist, dass es nur die letzte Kategorie greift. Ich habe eine schnelle Google-Suche durchgeführt und eine Lösung gefunden, die bei meiner Testinstallation zu funktionieren scheint. hier

Dies wird nur angezeigt, wenn sie sich auf einer einzelnen Beitragsseite befinden. Ansonsten passieren schlimme Dinge (IE doppelter Beitrag usw.)

    <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.