wordpress ACF字段调用方法

下面把「常用、不常用但有用」的 ACF 字段调用方式一次整理给你,直接复制即可用。

所有示例都假设字段挂在当前页面/文章上;如果在选项页、用户、分类法上,请看第 5 节「其它对象」。

基本语法(PHP 模板文件里)

复制代码
// 返回值(原始)
$val = get_field('field_name');

// 安全输出
echo esc_html(get_field('field_name'));

// 带默认值
echo esc_html(get_field('field_name') ?: '暂无内容');

常见字段类型速查 | 字段类型 | 直接 echo 会得到 | 常用写法 |

|---|---|---|

| Text / Textarea / Number | 字符串 | echo esc_html(get_field('tx')); |

| Image (返回数组) | 数组 | echo wp_get_attachment_image(get_field('img')['ID'], 'medium'); |

| Image (返回 URL) | 字符串 | " /> |

| File | 数组 | 下载 | | Select (单选) | 单个值 | echo esc_html(get_field('color')); |

| Select (多选) | 数组 | echo implode(', ', get_field('colors')); |

| Checkbox | 数组 | 同上 | | True / False | bool | if (get_field('show_banner')): ... endif; |

| Wysiwyg | 已格式化 HTML | echo apply_filters('the_content', get_field('intro')); |

| Date Picker | Ymd | echo DateTime::createFromFormat('Ymd', get_field('date'))->format('Y-m-d'); |

| Color Picker | hex | style="color:;" |

| Repeater | 数组 | 见第 3 节 |

| Flexible Content | 数组 | 见第 4 节 |

| Group | 数组 | echo esc_html(get_field('group')['sub_field']); |

Repeater / 嵌套循环

复制代码
<?php if (have_rows('slides')): ?>
    <div class="swiper-wrapper">
    <?php while (have_rows('slides')): the_row(); ?>
        <div class="swiper-slide">
            <img src="<?php echo esc_url(get_sub_field('slide_img')['sizes']['large']); ?>" />
            <h3><?php echo esc_html(get_sub_field('slide_title')); ?></h3>
        </div>
    <?php endwhile; ?>
    </div>
<?php endif; ?>

子字段用 get_sub_field() / the_sub_field()

支持无限嵌套 repeater。

Flexible Content(模块化布局)

复制代码
<?php if (have_rows('sections')): ?>
    <?php while (have_rows('sections')): the_row();
        get_template_part('flex/' . get_row_layout());   // 把每种布局拆成 flex/layout_name.php
    endwhile; ?>
<?php endif; ?>

flex/text.php 例子:

复制代码
<section class="text-section">
    <div class="container">
        <?php echo apply_filters('the_content', get_sub_field('text')); ?>
    </div>
</section>

读取其它对象上的字段 | 对象 | 写法 |

|---|---|

| 选项页(Options Page) | get_field('field_name', 'option'); |

| 用户 | get_field('field_name', 'user_' . $user_id); |

| 分类法 | get_field('field_name', 'term_' . $term_id); |

| 附件 | get_field('field_name', $attachment_id); |

短代码(让编辑在可视化编辑器里插入)

复制代码
// 在 functions.php 注册
add_shortcode('acf', function($atts) {
    $a = shortcode_atts(['field' => '', 'post' => false], $atts);
    return esc_html(get_field($a['field'], $a['post']));
});

使用:[acf field="phone"]

如需返回图片:[acf field="logo" post="option"] 再自己包< img>。

常用辅助函数

复制代码
// 直接输出一张图(已含 alt)
the_post_thumbnail('medium', ['class' => 'rounded']);

// 获取多张图(Gallery 字段)
$gallery = get_field('gallery');
foreach ($gallery as $img) {
    echo wp_get_attachment_image($img['ID'], 'thumbnail');
}

// 清除缓存后的新值
wp_cache_flush();
$fresh = get_field('field_name', false, false);   // 第三参数 false = 不格式化

调试技巧

复制代码
<?php
// 看整个字段数组
echo '<pre>', htmlspecialchars(print_r(get_field('repeater_name'), true)), '</pre>';

// 看所有自定义字段
echo '<pre>', htmlspecialchars(print_r(get_post_meta(get_the_ID()), true)), '</pre>';
?>

性能注意

Repeater/Flexible 字段量大时,建议开 「本地 JSON」 或 「字段缓存」(ACF PRO 自动)。

不要在一个循环里反复 get_field('option'),先用变量存起来。

一句话总结「当前文章」get_field('name');

「选项页」get_field('name', 'option');

「子字段」get_sub_field('name');

「循环」have_rows('name') + while 即可。

以上代码全部实测可用,按场景直接粘贴即可。

原文

https://www.wpniu.com/article/6686.html

相关推荐
Web极客码2 天前
如何将cPanel面板里的WordPress迁移到宝塔面板
wordpress·宝塔面板·cpanel
WordPress学习笔记3 天前
精美wordpress模板免费下载
wordpress
WordPress学习笔记3 天前
WordPress提示“无法检索特色图片数据”
wordpress
WordPress学习笔记4 天前
wordpress外贸主题Google地图添加(替换)方案
前端·wordpress·wordpress地图
WordPress学习笔记5 天前
让wordpress随机调用一张指定文件夹中的图片
wordpress·wordpress随机调用
WordPress学习笔记5 天前
wordpress白屏问题常见原因及解决方案
wordpress
Web极客码6 天前
Wordpress如何调整区块高度与宽度
服务器·主题·wordpress
WordPress学习笔记6 天前
好用易上手的wordpress外贸主题推荐
wordpress
WordPress学习笔记8 天前
公司网站wordpress主题推荐
wordpress