ฉันทำงานในไซต์ WordPress สำหรับวงดนตรีของฉันและฉันต้องการทำเครื่องหมายทุกโพสต์ที่ 3 ในหน้าบล็อกของเราเพื่อให้มีการใช้คลาสพิเศษกับมันทุกคนมีตัวชี้ใด ๆ เกี่ยวกับวิธีการบรรลุเป้าหมายนี้? ความช่วยเหลือใด ๆ ที่ชื่นชมมากขอบคุณ! ร็อคแอนด์โรล.
ฉันทำงานในไซต์ WordPress สำหรับวงดนตรีของฉันและฉันต้องการทำเครื่องหมายทุกโพสต์ที่ 3 ในหน้าบล็อกของเราเพื่อให้มีการใช้คลาสพิเศษกับมันทุกคนมีตัวชี้ใด ๆ เกี่ยวกับวิธีการบรรลุเป้าหมายนี้? ความช่วยเหลือใด ๆ ที่ชื่นชมมากขอบคุณ! ร็อคแอนด์โรล.
คำตอบ:
แนวทางของฉัน ไม่มีฟังก์ชั่นพิเศษไม่มีตัวกรอง :)
<?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' : '' ); ?>>
Notice: Undefined property: wpdb::$current_post in
เป็นส่วนเสริมของ @helgathevikings คำตอบ
static
ตัวแปรภายในชั้นเรียนจะช่วยให้พฤติกรรมเช่นเดียวกับการมีตัวแปรทั่วโลก: พวกเขาอยู่ในสถานที่และไม่เปลี่ยนแปลงเว้นแต่คุณจะไม่เปลี่ยนแปลงพวกเขา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' );
เราสามารถใช้current_post
คุณสมบัติของ$wp_query
วัตถุระดับโลกได้ มาใช้ฟังก์ชั่นนิรนามพร้อม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()
ตรวจสอบตามเงื่อนไข
$wpdb->current_post
?
หากธีมของคุณใช้ post_class () เพื่อสร้างคลาสโพสต์คุณสามารถลองได้ ฉันไม่แน่ใจ 100% ว่าจะจัดการเลขหน้า b / ci ได้อย่างไรมีโพสต์ไม่เพียงพอในการติดตั้งในพื้นที่ของฉันเพื่อทดสอบ
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;
}
static
var แทน a global
เพื่อรักษาเนมสเปซให้สะอาด อย่างไรก็ตาม: +1
$wpdb->current_post
โดยไม่ต้องสร้างตัวแปรอื่น
$i = 0;
if ( have_posts ) :
while( have_posts ) :
the_post();
$class = 'class="BASIC-CLASS';
if ( 0 === ( $i % 3 ) )
$class .= 'YOUR-SPECIAL-CLASS';
$class .= '"';
echo "<div {$class}>";
// do stuff
echo '</div>';
$i++;
endwhile;
endif;
นอกจากนี้ยังมีวิธีในการทำเช่นนี้กับ CSS และ javascript
ด้วย CSS3 คุณกำหนดเป้าหมายทุกโพสต์ที่สามด้วยตัวเลือก nth-child
article.post:nth-child(3n+0)
{
background-color: #777;
}
หรือด้วย jQuery คุณสามารถเพิ่มคลาส CSS โดยใช้เทคนิคเดียวกัน
jQuery(function($) {
$( "article.post:nth-child(3n+0)" ).addClass("custom-class");
});