nicolaigrossherr
  • 0
Новичок

Альтернативный post_class для каждого сообщения

  • 0

Мне нужно иметь чередующийся (четный, нечетный…) класс для сообщений, чтобы обеспечить альтернативное выделение в столбце. Лучше всего было бы прикрепить это к post_class(), чтобы оно было в каждом экземпляре post_class(). Ниже приведен код, который у меня есть на данный момент для достижения этого эффекта.

<?php 

// setting other variables for alternating categories
$style_classes = array('even', 'odd');
$style_counter = 0;
?>

<?php if (have_posts()) : ?>

<?php while (have_posts()) : the_post(); ?>

<div class="<?php $k = $style_counter%2; echo $style_classes[$k]; $style_counter++; ?>">

<?php the_cotent(); ?>

</div>

<?php endwhile; ?>

<?php endif; ?>
Share
  1. Вы должны добавить следующий код в functions.php :

    add_filter ( 'post_class' , 'my_post_class' );
    global $current_class;
    $current_class = 'odd';
    
    function my_post_class ( $classes ) { 
       global $current_class;
       $classes[] = $current_class;
    
       $current_class = ($current_class == 'odd') ? 'even' : 'odd';
    
       return $classes;
    }
    

    Это гарантирует, что все нечетные сообщения на странице будут иметь класс «нечетный», а все четные сообщения будут иметь класс «четный», просто используя post_class() в вашей теме.

    • 0
  2. Это работает, он переходит в дополнительный класс в post_class() :

    <?php $c = 0; ?>
    <?php if (have_posts()) : ?>
        <?php while (have_posts()) : the_post(); ?>
            <div <?php post_class((++$c % 2 === 0) ? 'odd' : 'even'); ?>>
                <?php the_content(); ?>
            </div>
        <?php endwhile; ?>
    <?php endif; ?>
    

    РЕДАКТИРОВАТЬ: вот способ, который создает версию post_class(), которая будет отслеживать количество на странице. Теперь он будет использовать новое имя, oddeven_post_class() но оно работает так, как вы хотите. Все, что вам нужно сделать, это поместить это в functions.php :

    /* Drop this block into functions.php */
    class MyCounter {
        var $c = 0;
        function increment(){
            ++$this->c;
            return;
        }
        function oddOrEven(){
            $out = ($this->c % 2 === 0) ? 'odd' : 'even';
            $this->increment();
            return $out;
        }
    }
    $my_instance = new MyCounter();
    function post_class_oddeven() {
        global $my_instance;
        ob_start();
        post_class($my_instance->oddOrEven());
        $str = ob_get_contents();
        ob_end_clean();
        echo $str;
    }
    /* end block */
    

    Так что, чтобы назвать это, используйте post_class_oddeven() в своей теме, где бы вы ни называлиpost_class()

    • 0
  3. У меня есть другое решение, если вы хотите добавить определенный класс к другому контенту. Например, только для цикла:

    add_filter( 'post_class', 'my_post_class' );
    
    function my_post_class( $classes ) {
    
      if ( ! is_single() ) {
        global $wp_query;
    
        // Set "odd" or "even" class if is not single
        $classes[] = $wp_query->current_post % 2 == 0 ? 'even' : 'odd' ;
      }
    
      return $classes;
    }
    

    Потому что вы не хотите добавлять класс «четный» или «нечетный» при отображении одного содержимого.

    • 0
  4. Вы можете сделать это с помощью прямого css. Например, в теме двадцать семнадцать, где цикл находится в div «main»:

    #main .post {
        color: red;
    }
    
    #main .post:nth-of-type(2n) {
        color: blue;
    }
    

    будет делать свое дело.

    • 0

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

You must login to add an answer.