squrler
  • 0
Новичок

Добавление класса ‘current_post_item’ к текущему сообщению в цикле

  • 0

Я использую цикл на боковой панели своего сайта, чтобы показать все сообщения в этой категории. Теперь я хотел бы включить класс current_post в текущую запись, которая отображается для стилизации этого элемента в списке.

Я пробовал искать условные теги или эту пользовательскую функцию wp_list_post_types, но обе они не работали. Кто-нибудь знает, есть ли способ сделать это?

РЕДАКТИРОВАТЬ: добавление цикла из комментария ниже

<?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; ?>
Share
  1. Вы должны иметь возможность получить идентификатор запрошенного объекта и использовать его для сравнения внутри вашего пользовательского цикла.

    Перед вашим существующим кодом цикла (то, что вы разместили выше), но, очевидно, после открывающего тега PHP.

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

    Затем где-то внутри ваших пользовательских циклов WP..

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

    Надеюсь, это поможет..

    • 0
  2. Если вы используете цикл, вы сможете сделать что-то подобное, это не проверено, но должно работать. Цикл для боковой панели

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

    потом
    <div class="post <?php echo $currentClass; ?>">.....

    Это не проверено, поэтому я просто предполагаю, что $post->ID получит идентификатор сообщения снаружи и get_the_ID() получит идентификатор сообщения внутри цикла. Если это не сработает, не могли бы вы опубликовать свой код цикла, и я проведу тест

    РЕДАКТИРОВАТЬ

    Есть несколько проблем с вашей петлей. Во-первых, он захватывает только последнюю категорию. Я сделал быстрый поиск в Google и нашел решение, которое, похоже, работает на моей тестовой установке здесь.

    Это будет отображаться только в том случае, если они находятся на странице с одним сообщением. В противном случае случаются плохие вещи (показ дубликатов сообщений IE и т. д.)

        <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>
    
    • 0

Оставить ответ

You must login to add an answer.