如何为Advanced Custom Fields自定义字段设置page slug默认值
实现方案
这个需求完全可以实现。ACF后台的默认值设置项仅支持静态内容,无法直接读取当前页面的动态属性,不需要额外安装插件,通过ACF官方提供的钩子就能完成需求,逻辑上不会破坏原有字段功能,也不会覆盖你手动填写过的字段内容。
- 首先在ACF后台把
page_slug字段的默认值输入框留空,不要填任何静态内容 - 把下面的代码添加到当前主题的
functions.php文件,或者你自己搭建的自定义功能插件里:
add_filter('acf/load_value/name=page_slug', 'set_page_slug_default_value', 10, 3); function set_page_slug_default_value($value, $post_id, $field) { // 已有内容的字段不做处理,避免覆盖手动填写的内容 if ($value !== '' && $value !== null) { return $value; } // 仅针对页面(page)类型生效,需要适配其他文章类型可以修改此处判断 if (get_post_type($post_id) !== 'page') { return $value; } // 读取当前页面的slug作为字段值 $current_slug = get_post_field('post_name', $post_id); return $current_slug ?: $value; }
注意事项
- 新建页面时如果还没保存过草稿/没有触发系统自动生成slug,字段会暂时显示为空,第一次保存页面生成slug后,字段会自动填充对应的slug值
- 如果需要强制字段值永远和页面slug保持同步(哪怕手动修改过字段也会被覆盖),删掉代码里判断
$value是否为空的那段逻辑即可,非特殊需求不建议这么设置
相关配置界面参考:
内容的提问来源于stack exchange,提问作者Dale
相关产品推荐
相关产品推荐

