You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:58:20