Antworten:
Mein Ansatz. Keine Zusatzfunktion, kein Filter. :)
<?php $GLOBALS['wpdb']->current_post = 0; ?>
<div <?php post_class( 0 === ++$GLOBALS['wpdb']->current_post % 3 ? 'third' : '' ); ?>>
Alternative:
<div <?php post_class( 0 === ++$GLOBALS['wpdb']->wpse_post_counter % 3 ? 'third' : '' ); ?>>
Notice: Undefined property: wpdb::$current_post in
Als Ergänzung zu @helgathevikings antworten
staticVariablen in einer Klasse hat dasselbe Verhalten wie die Verwendung globaler Variablen: Sie bleiben an Ort und Stelle und ändern sich nicht, sofern Sie sie nicht ändern.function wpse44845_add_special_post_class( $classes )
{
// Thanks to @Milo and @TomAuger for the heads-up in the comments
0 === $GLOBALS['wpdb']->current_post %3 AND $classes[] = 'YOUR CLASS';
return $classes;
}
add_filter( 'post_class','wpse44845_add_special_post_class' );
Wir könnten die current_postEigenschaft des globalen $wp_queryObjekts nutzen. Verwenden wir eine anonyme Funktion mit dem useSchlüsselwort, um die globale $wp_queryReferenz weiterzugeben ( PHP 5.3+ ):
add_filter( 'post_class', function( $classes ) use ( &$wp_query )
{
0 === $wp_query->current_post %3 AND $classes[] = 'YOUR CLASS';
return $classes;
} );
Weiterhin könnten wir es mit einer bedingten Prüfung auf die Hauptschleife beschränken in_the_loop().
$wpdb->current_post?
Wenn Ihr Theme post_class () verwendet, um Post-Klassen zu generieren, können Sie es versuchen. Ich bin mir nicht 100% sicher, wie es mit Paginierung umgehen wird
add_filter('post_class','wpa_44845');
global $current_count;
$current_count = 1;
function wpa_44845( $classes ){
global $current_count;
if ($current_count %3 == 0 ) $classes[] = 'special-class';
$current_count++;
return $classes;
}
staticvar anstelle von a verwenden global, um den Namespace sauber zu halten. Trotzdem: +1.
$wpdb->current_postohne eine andere Variable erstellen zu müssen.
Es gibt auch Möglichkeiten, dies mit CSS und Javascript zu tun.
Mit CSS3 zielen Sie auf jeden dritten Beitrag mit einem Selektor für n-te Kinder.
article.post:nth-child(3n+0)
{
background-color: #777;
}
Oder mit jQuery können Sie die CSS-Klasse mit derselben Technik hinzufügen.
jQuery(function($) {
$( "article.post:nth-child(3n+0)" ).addClass("custom-class");
});