如何在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; } } } }
补充说明:
- 修正了你示例代码中文件名拼写不一致的问题(原代码路径与文件修改时间指向的文件名不统一)。
- 添加了
break语句,一旦找到包含title子字段的灵活项就停止循环,提升执行效率(即使不添加,WordPress也会自动避免重复入队样式,但提前终止更合理)。 - 若需要限制仅在特定页面模板生效,可以取消注释
is_page_template()的检查,替换为你的目标模板文件名。
内容的提问来源于stack exchange,提问作者vol4ikman
相关产品推荐
相关产品推荐

