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

WP-ACF与自定义主题:如何在其他页面复用已有自定义字段?

在WordPress自定义主题中复用其他页面的ACF字段(保留样式与结构)

问题背景

网站基于WordPress+Advanced Custom Fields(ACF)+自定义主题搭建,每个页面配有独立模板定义布局。现在需要在目标页面复用另一页面(比如示例中的“关于我们”页面)的ACF自定义字段,同时保留原页面的样式与结构,实现不同ACF组间的无缝适配,之前尝试复制字段未达预期效果。


可行技术方案

方案1:直接用ACF的get_field()指定源页面ID

这是最直接的方法,ACF的get_field()支持传入第二个参数指定要获取字段的页面ID,无需复制字段组。

操作步骤:

  1. 找到源页面(比如“关于我们”)的ID:在WordPress后台编辑该页面时,URL里的post=XXX中的XXX就是页面ID
  2. 在目标页面的模板代码中,调用get_field()时传入这个ID,替换原来的无参数调用

示例代码(复用“关于我们”的banner和section01):

<?php
/* Template Name: 目标页面模板 */
global $url_tema;
get_header();

// 替换成你的"关于我们"页面实际ID
$source_page_id = 123;
?>
<main class="target-page">
    <!-- 复用关于我们的banner区域 -->
    <div class="bannerTop bg">
        <div class="main">
            <h1><?php the_title() ?></h1>
        </div>
        <?php $banner_img = get_field('imagem_banner', $source_page_id); ?>
        <img src="<?php echo $banner_img['url'] ?>" class="bg">
    </div>

    <!-- 复用关于我们的section01区域 -->
    <section class="section01">
        <div class="main">
            <div class="bannerSection">
                <div class="ctn">
                    <h3>Who We Are</h3>
                </div>
            </div>
            <div class="text"><?php echo get_field('texto_01', $source_page_id) ?></div>
        </div>
    </section>

    <!-- 目标页面自有内容或继续复用其他字段 -->
</main>
<?php get_footer(); ?>

方案2:封装复用模块为独立模板片段

如果需要复用的内容较多,把“关于我们”中要复用的部分抽成独立PHP文件,在目标页面引入,方便维护。

操作步骤:

  1. 在主题目录下创建template-parts/acf-reuse/sobre-sections.php,写入复用代码:
<?php
// 接收传入的源页面ID
$source_id = isset($args['source_id']) ? $args['source_id'] : get_the_ID();
?>
<!-- 复用banner -->
<div class="bannerTop bg">
    <div class="main">
        <h1><?php the_title() ?></h1>
    </div>
    <?php $banner_img = get_field('imagem_banner', $source_id); ?>
    <img src="<?php echo $banner_img['url'] ?>" class="bg">
</div>

<!-- 复用section01 -->
<section class="section01">
    <div class="main">
        <div class="bannerSection">
            <div class="ctn">
                <h3>Who We Are</h3>
            </div>
        </div>
        <div class="text"><?php echo get_field('texto_01', $source_id) ?></div>
    </div>
</section>

<!-- 可以继续添加视频、时间线等其他需要复用的模块 -->
  1. 在目标页面模板中引入该片段:
<?php
/* Template Name: 目标页面模板 */
global $url_tema;
get_header();

// 源页面ID
$source_page_id = 123;
// 引入复用片段
get_template_part('template-parts/acf-reuse/sobre-sections', null, ['source_id' => $source_page_id]);
?>

<!-- 目标页面自有内容 -->
<main class="target-page">
    <!-- 其他自定义内容 -->
</main>
<?php get_footer(); ?>

方案3:用ACF选项页实现全局复用

如果某些字段需要在多个页面复用,建议把这些字段移到ACF选项页,所有页面都能直接调用,无需指定页面ID。

操作步骤:

  1. 创建ACF选项页:
    • 进入ACF后台 → 选项页 → 添加新选项页(比如命名为“全局内容”)
    • 将需要复用的字段(比如imagem_banner、texto_01)移动到该选项页的字段组中
  2. 在模板中调用选项页字段:
<div class="bannerTop bg">
    <div class="main">
        <h1><?php the_title() ?></h1>
    </div>
    <?php $banner_img = get_field('imagem_banner', 'option'); ?>
    <img src="<?php echo $banner_img['url'] ?>" class="bg">
</div>

关键注意事项

  • 确保目标页面模板中保留了源页面的CSS类(比如bannerTop、section01),这样才能继承原样式
  • 对于重复字段(比如videos_01、timeline),复用逻辑和单个字段一致,循环时传入源页面ID即可:
<?php foreach (get_field('videos_01', $source_page_id) as $key) {
    // 原有的视频解析代码不变
} ?>
  • 若需要动态切换源页面,可以在目标页面的ACF中添加“页面选择器”字段,让后台编辑人员自主选择要复用的源页面,模板中获取该字段值作为源ID即可

内容的提问来源于stack exchange,提问作者Lucas Ferreira Torres

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:54:57