问题描述

我正在为我的乐队工作一个 WordPress 网站,我想在我们的博客页面上标记每一个第三个帖子,以应用一个特殊的类,任何人都有任何指针如何实现这一点?任何帮助非常感谢,谢谢!摇滚乐。

最佳解决方案

我的做法没有额外的功能,没有过滤器。 🙂

<?php $GLOBALS['wpdb']->current_post = 0; ?>
<div <?php post_class( 0 === ++$GLOBALS['wpdb']->current_post % 3 ? 'third' : '' ); ?>>

替代方案:

<div <?php post_class( 0 === ++$GLOBALS['wpdb']->wpse_post_counter % 3 ? 'third' : '' ); ?>>

次佳解决方案

作为 @helgathevikings 答案的补充

使用 post_class() fn,而不会污染全局命名空间

  1. 在类中使用 static 变量允许与具有全局变量相同的行为:它们保持原样,不要更改,除非您不更改它们。

  2. 更好的 (如 @Milo 在评论中建议的),从 DB 类中获取当前的帖子。

示例:

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' );

Update

我们可以利用全局 $wp_query 对象的 current_post 属性。让我们用 use 关键字使用匿名函数,通过引用传递全局 $wp_query(PHP 5.3+):

add_filter( 'post_class', function( $classes ) use ( &$wp_query )
{
    0 === $wp_query->current_post %3 AND $classes[] = 'YOUR CLASS';

    return $classes;
} );

此外,我们可以通过 in_the_loop()条件检查将其限制到主循环。

第三种解决方案

如果您的主题使用 post_class() 生成后期课程,您可以尝试。我不是 100%肯定如何处理分页 b /c 我没有足够的帖子在我的本地安装来测试它

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;

 }

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。