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

WordPress:如何在页面不同位置调用ACF Flexible Content指定布局内容

解决方案

方案思路

现有全局调用柔性内容的模板会输出所有布局,我们只需要给该模板增加指定布局过滤的入参支持,即可实现按需输出对应布局内容,不用重写布局渲染逻辑,完全复用现有代码。

步骤1:修改柔性内容通用模板

编辑template-parts/fields/field--flex-content.php文件,调整代码如下:

<?php
// 接收传入的参数:仅渲染指定布局,留空则输出全部
$allowed_layouts = $args['allowed_layouts'] ?? [];

// 此处替换为你后台Flexible Content字段组的实际机读名称
$flex_content = get_field('flexible_content_template');

if( $flex_content ):
    foreach( $flex_content as $layout ):
        $layout_name = $layout['acf_fc_layout'];
        // 如果有指定允许的布局,不匹配的就跳过
        if( !empty($allowed_layouts) && !in_array($layout_name, $allowed_layouts) ){
            continue;
        }
        // 保留原有模板里的布局渲染逻辑不变
        switch ($layout_name) {
            case 'icon-columns':
                // 原有Icon Columns布局的输出代码
                break;
            case 'text_and_full_image': // 替换为你后台对应布局的实际机读名称
                // 原有text and full image布局的输出代码
                break;
            // 其他原有布局的判断逻辑全部保留
        }
    endforeach;
endif;
?>

注意:请把代码里的字段名、布局机读名称替换成你后台实际设置的对应值,不要直接使用中文布局名。

步骤2:修改B2B landing page模板代码

把原来直接调用get_template_part的位置,传入要过滤的布局参数即可:

<!-- START FAST, EASY ORDERING SECTION -->
<?php 
// 仅输出icon-columns布局
get_template_part(
    'template-parts/fields/field--flex-content',
    '',
    ['allowed_layouts' => ['icon-columns']]
); 
?>
<!-- END FAST, EASY ORDERING SECTION -->

<!-- START HOW OUR GIFTS MAKE A SIGNIFICANT IMPACT Section -->
<?php 
// 仅输出text and full image布局
get_template_part(
    'template-parts/fields/field--flex-content',
    '',
    ['allowed_layouts' => ['text_and_full_image']] // 替换为实际的布局机读名
); 
?>
<!-- END HOW OUR GIFTS MAKE A SIGNIFICANT IMPACT Section -->

低版本WordPress兼容方案

如果你的WordPress版本低于5.5,不支持get_template_part传参,可以改用set_query_var的方式传递参数:

<!-- 输出指定布局示例 -->
<?php 
set_query_var( 'allowed_layouts', ['icon-columns'] );
get_template_part('template-parts/fields/field--flex-content');
// 用完清空参数避免影响后续调用
set_query_var( 'allowed_layouts', [] );
?>

然后在field--flex-content.php里用$allowed_layouts = get_query_var('allowed_layouts', []);接收参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:57:00