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

如何在WordPress灵活字段子字段启用时加载CSS?应使用哪个钩子?

正确的钩子选择:wp_enqueue_scripts,而非init

你不能使用init钩子来实现这个需求,原因是init在WordPress查询初始化之前就触发了,此时当前页面的post对象还未加载,ACF的get_field()无法获取到对应页面的灵活字段数据。

正确的做法是使用**wp_enqueue_scripts钩子**,这个钩子会在前端页面加载脚本和样式时触发,且此时WordPress已经完成了查询,post对象可用,get_field()能正常获取到当前页面的字段值。

调整后的示例代码:

add_action('wp_enqueue_scripts', 'enqueue_flexible_field_styles');
function enqueue_flexible_field_styles() {
    // 可选:如果只想在特定页面模板上执行,添加模板检查
    // if (!is_page_template('your-template.php')) return;

    $flexible_fields = get_field('flexable_fields');
    if ($flexible_fields) {
        foreach ($flexible_fields as $item) {
            if (!empty($item['title'])) {
                wp_enqueue_style(
                    'title-styles',
                    get_template_directory_uri() . '/css/title-style.css', // 修正了文件名拼写不一致的问题
                    array(),
                    filemtime(get_template_directory() . '/css/title-style.css'),
                    false
                );
                // 找到匹配项后终止循环,避免重复执行
                break;
            }
        }
    }
}

补充说明:

  1. 修正了你示例代码中文件名拼写不一致的问题(原代码路径与文件修改时间指向的文件名不统一)。
  2. 添加了break语句,一旦找到包含title子字段的灵活项就停止循环,提升执行效率(即使不添加,WordPress也会自动避免重复入队样式,但提前终止更合理)。
  3. 若需要限制仅在特定页面模板生效,可以取消注释is_page_template()的检查,替换为你的目标模板文件名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:46:00