it-swarm-vi.tech

Thay thế post_group trên mỗi bài

Tôi cần phải có một lớp xen kẽ (chẵn, lẻ ...) trên các bài đăng để cung cấp các điểm nổi bật xen kẽ trên một cột. Điều tốt nhất sẽ là đính kèm cái này vào post_group () sao cho nó có trên mọi phiên bản của post_group (). Dưới đây là mã tôi có tại thời điểm này để đạt được hiệu ứng này.

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

Bạn nên thêm mã sau vào 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;
}

Điều này đảm bảo rằng tất cả các bài đăng kỳ lạ trên trang sẽ có lớp 'lẻ' và tất cả các bài đăng chẵn sẽ có lớp 'chẵn' chỉ bằng cách sử dụng post_class() trong chủ đề của bạn.

6
Adhip Gupta

Tôi có một giải pháp khác nếu bạn muốn thêm một lớp cụ thể vào nội dung khác nhau. Chẳng hạn, chỉ lặp:

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;
}

Bởi vì bạn không muốn thêm lớp "chẵn" hoặc "lẻ" khi hiển thị một nội dung.

1
Marco Godínez

Điều này hoạt động, nó chuyển trong lớp bổ sung vào 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; ?>

EDIT: Đây là cách tạo phiên bản post_class() sẽ theo dõi số đếm trên trang. Bây giờ, nó sẽ sử dụng một tên mới, oddeven_post_class() nhưng nó hoạt động như bạn muốn. Tất cả những gì bạn cần làm là thả cái này vào 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 */

Vì vậy, để gọi nó, hãy sử dụng post_class_oddeven() trong chủ đề của bạn bất cứ nơi nào bạn sẽ gọi post_class()

1
artlung

Bạn có thể làm điều này với css thẳng về phía trước. Ví dụ, trong chủ đề thứ hai mươi, trong đó vòng lặp nằm trong div "chính":

#main .post {
    color: red;
}

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

sẽ thực hiện các mẹo.

1
ronald