WordPress插件开发:Swiper滑块交替显示2/3篇文章问题求助
问题排查
原代码的核心问题是切换$posts_per_slide的逻辑错误:
- 完成一个slide后立即切换
$posts_per_slide的值,导致下一个slide的起始判断使用了新数值,破坏了交替计数逻辑。 - 举例:第一个slide用3篇,关闭后
$posts_per_slide改为2,此时$post_counter为3,下一次判断3%2===0不成立,直到$post_counter到4才会开启新slide,导致第4篇文章单独成slide,不符合3、2、3、2的交替要求。
解决方案
改用跟踪当前幻灯片序号的方式,根据幻灯片奇偶性决定每slide的文章数量,逻辑更清晰且不易出错:
$posts = get_posts( $args ); $html = '<!-- Begin slider markup --> <div class="swiper"> <div class="swiper-wrapper">'; $post_counter = 0; $slide_number = 1; // 跟踪当前是第几个幻灯片 foreach ( $posts as $post ) { // 根据当前幻灯片序号确定每slide的文章数 $posts_per_slide = $slide_number % 2 === 1 ? 3 : 2; // 开启新幻灯片(当当前计数是该slide的起始位置时) if ( $post_counter % $posts_per_slide === 0 ) { $html .= '<div class="swiper-slide">'; } $html .= '<article id="post-' . esc_attr( $post->ID ) . '" class="wp-post"> <div class="wp-post-thumbnail"> <a href="' . esc_url( get_the_permalink( $post->ID ) ) . '"><img src="https://placehold.co/1000x700" width="1000" height="700" /></a> <h2 class="wp-post-title">' . get_the_title( $post->ID ) . '</h2> </div> </article>'; $post_counter++; // 关闭当前幻灯片(当当前计数达到该slide的文章数时) if ( $post_counter % $posts_per_slide === 0 ) { $html .= '</div>'; $slide_number++; // 完成一个幻灯片,序号+1 } } // 处理最后一个未关闭的幻灯片(如果剩余文章不足一个slide的数量) if ( $post_counter % ( $slide_number % 2 === 1 ? 3 : 2 ) !== 0 ) { $html .= '</div>'; } $html .= '</div> </div> <!-- End slider markup -->'; echo $html;
关键改进点
- 新增
$slide_number变量,明确区分当前是第几个幻灯片,奇数幻灯片放3篇,偶数放2篇。 - 每次开启slide前重新计算
$posts_per_slide,确保逻辑与幻灯片序号绑定,不会出现计数混乱。 - 增加了最后一个幻灯片的闭合处理,避免因剩余文章不足导致的HTML标签未闭合问题。
内容的提问来源于stack exchange,提问作者leemon
相关产品推荐
相关产品推荐

