問題描述

我正在為我的樂隊工作一個 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。