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

ACF复选框循环未显示全部文章及输出位置异常技术求助

排查WordPress短代码的两个问题:仅显示一篇文章&内容错位

让我们逐个拆解你遇到的两个问题:

问题1:最初代码仅显示一篇文章的原因

你的初始代码里犯了一个典型的字符串赋值错误:在循环内部,你用$output = '<p>' . get_the_title() . '</p>';直接赋值而不是追加内容。这意味着每循环一篇文章,$output就会被新的标题覆盖,循环结束后自然只保留最后一篇文章的内容。另外代码里还多了个无意义的echo '</ul>'(前面没有对应的<ul>标签),这也是需要清理的冗余代码。

问题2:修改后内容显示在页面容器顶部的原因

你修改后的代码里,这一行是罪魁祸首:

echo '<p>' . the_field('product_price_exc_vat') . '</p>';

ACF的the_field()函数是直接输出内容的,它不会返回字符串供你拼接。当短代码执行到这一行时,价格内容会立刻被输出到页面,而不是追加到$output变量里。因为短代码的返回值会在页面渲染的合适位置插入,提前echo的内容就会跑到页面最前面。


修复后的完整代码

下面是修正了两个问题的最终版本,我还做了一些代码规范优化:

function featured_products() {
    $args = array(
        'posts_per_page' => -1, // 显示所有符合条件的产品,你也可以改成10
        'post_type'      => 'products',
        'meta_query'     => array(
            array(
                'key'     => 'home_featured',
                'value'   => '1',
                'compare' => 'LIKE'
            ),
        ),
    );

    // 初始化输出变量,避免未定义的警告
    $output = '<div class="products">';
    
    $the_query = new WP_Query( $args );

    if ( $the_query->have_posts() ) {
        while ( $the_query->have_posts() ) {
            $the_query->the_post();
            
            // 用.=追加内容,而不是=覆盖
            $output .= '<div class="col-eq-height col-md-6" style="margin-bottom:30px;">';
            $output .= '<div class="product">';
            $output .= '<div id="thumbnail"><a href="' . get_the_permalink() . '">' . get_the_post_thumbnail() . '</a></div>';
            $output .= '<div id="content">';
            $output .= '<p id="title"><a href="' . get_the_permalink() . '">' . get_the_title() . '</a></p>';
            // 使用get_field()替代the_field(),它会返回值而不是直接输出
            $output .= '<p>' . get_field('product_price_exc_vat') . '</p>';
            $output .= '</div>';
            $output .= '</div>';
            $output .= '</div>';
        }
        wp_reset_postdata();
    } else {
        $output .= "<p>There aren't any products to display.</p>";
    }

    $output .= '</div>';
    return $output;
}
add_shortcode('featured_products', 'featured_products');

关键修改点说明:

  1. 把循环内的$output =改成$output .=,确保每篇文章的内容都追加到输出变量里
  2. 替换the_field()为get_field(),这样价格内容会被拼接进$output,而不是提前输出
  3. 初始化$output变量,避免PHP未定义变量警告
  4. 移除了初始代码里无意义的echo '</ul>'

内容的提问来源于stack exchange,提问作者Jake Punton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:33:48