it-swarm.asia

البديل post_class على كل وظيفة

أحتاج إلى الحصول على فصل دراسي (متساوي ، فردي ...) في المنشورات لتقديم إضافات بديلة في عمود. أفضل شيء هو إرفاق هذا بـ 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; ?>
2
curtismchale

يجب عليك إضافة الكود التالي في 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() في نسختك.

6
Adhip Gupta

لدي حل آخر إذا كنت تريد إضافة فئة معينة إلى محتوى مختلف. على سبيل المثال ، فقط للتكرار:

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

لأنك لا تريد إضافة الفئة "الزوجية" أو "الفردية" عند عرض محتوى واحد.

1
Marco Godínez

هذا يعمل ، فإنه ينتقل في فئة إضافية إلى 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: إليك طريقة تنشئ نسخة من 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()

1
artlung

يمكنك القيام بذلك مع CSS مباشرة للأمام. في موضوع العشرينات على سبيل المثال ، حيث تكون الحلقة في div "رئيسي":

#main .post {
    color: red;
}

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

سوف تفعل الخدعة.

1
ronald