如何在ACF前端表单特定字段中允许Script标签?
解决ACF前端表单
<script>标签被剥离的问题 问题原因
前端提交acf_form时,WordPress会通过wp_kses对用户输入做严格过滤,移除<script>这类风险标签;而WP-Admin后台中管理员权限的输入过滤规则更宽松,所以出现前后端差异。
解决方案
方案1:针对指定字段跳过过滤
使用ACF的acf/update_value钩子,对目标字段直接返回原始提交值,绕过过滤逻辑。需替换代码中的field_xxxxxx为你的ACF字段键(字段键可在ACF字段编辑页的「高级」选项中查看):
add_filter('acf/update_value/key=field_xxxxxx', 'preserve_script_tags_in_footer_field', 10, 3); function preserve_script_tags_in_footer_field($value, $post_id, $field) { // 直接返回前端提交的原始值,跳过wp_kses过滤 return wp_unslash($_POST['acf']['field_xxxxxx']); }
方案2:安全允许<script>标签
如果不想完全禁用过滤,可通过wp_kses_allowed_html钩子,仅在前端提交ACF表单时,将<script>标签加入允许列表:
add_filter('wp_kses_allowed_html', 'allow_script_tags_for_frontend_acf_form', 10, 2); function allow_script_tags_for_frontend_acf_form($allowed_tags, $context) { // 仅针对前端ACF表单提交生效 if (!is_admin() && isset($_POST['acf'])) { // 允许<script>标签及常用属性 $allowed_tags['script'] = array( 'src' => true, 'type' => true, 'async' => true, 'defer' => true, ); } return $allowed_tags; }
重要提醒
- 仅对可信开放的前端表单(如仅登录用户可访问)使用上述方法,避免XSS攻击风险。
- 代码需添加到主题的
functions.php或自定义插件中,添加后请清除缓存测试效果。
内容的提问来源于stack exchange,提问作者nsilva
相关产品推荐
相关产品推荐

