Clase alternative post_class pentru fiecare postare

12 aug. 2010, 06:26:17
Vizualizări: 3.43K
Voturi: 2

Am nevoie să am o clasă alternativă (par, impar...) pe postări pentru a oferi evidențiere alternativă pe o coloană. Cel mai bine ar fi să atașez aceasta la post_class() astfel încât să fie pe fiecare instanță a post_class(). Mai jos este codul pe care îl am în acest moment pentru a obține acest efect.

<?php 

// setarea altor variabile pentru categorii alternative
$style_classes = array('par', 'impar');
$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_content(); ?>

</div>

<?php endwhile; ?>

<?php endif; ?>
0
Toate răspunsurile la întrebare 4
0

Ar trebui să adăugați următorul cod în 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;
}

Acest lucru asigură că toate articolele impare de pe pagină vor avea clasa 'odd' și toate cele pare vor avea clasa 'even' doar prin utilizarea post_class() în tema dumneavoastră.

12 aug. 2010 09:18:12
2

Aceasta funcționează, transmite clasa suplimentară în 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: Iată o modalitate care creează o versiune a post_class() care va ține evidența numărării pe pagină. Acum, va folosi un nou nume, oddeven_post_class(), dar funcționează așa cum doriți. Tot ce trebuie să faceți este să adăugați acest cod în functions.php:

/* Adăugați acest bloc în 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;
}
/* sfârșitul blocului */

Deci, pentru a o apela, folosiți post_class_oddeven() în tema dvs. oriunde ați apela post_class()

12 aug. 2010 06:52:33
Comentarii

Da, asta este încă doar o variație a soluției de mai sus. Poate nu am fost clar, dar caut o soluție care ar merge în fișierul functions.php și apoi doar o trimite la orice instanță a post_class(). Așa nu va trebui să modific toate instanțele individuale de bucle unde am nevoie de asta.

curtismchale curtismchale
12 aug. 2010 07:21:00

Am actualizat răspunsul meu cu o soluție care funcționează pentru mine.

artlung artlung
12 aug. 2010 07:45:10
1

Am o altă soluție dacă dorești să adaugi o clasă specifică unui conținut diferit. De exemplu, doar pentru buclă:

add_filter( 'post_class', 'my_post_class' );

function my_post_class( $classes ) {

  if ( ! is_single() ) {
    global $wp_query;

    // Setează clasa "even" sau "odd" dacă nu este o postare singulară
    $classes[] = $wp_query->current_post % 2 == 0 ? 'even' : 'odd' ;
  }

  return $classes;
}

Pentru că nu dorești să adaugi clasa "even" sau "odd" când afișezi un conținut singular.

5 aug. 2014 02:41:28
Comentarii

Ai nimerit-o! Bună treabă, Marco.

James Kemp James Kemp
1 iul. 2015 19:17:00
0

Puteți face acest lucru cu CSS simplu. În tema twentyseventeen, de exemplu, unde bucla este într-un div "main":

#main .post {
    color: red;
}

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

va funcționa.

21 iun. 2017 13:19:09