如何在自定义Post Type子菜单页面中添加ACF字段?
解决方案:自定义子菜单页面显示ACF字段
针对你遇到的问题,有两种可靠的解决方式,根据你的需求选择即可:
方案一:将子菜单页面关联为ACF选项页面(推荐)
ACF自带选项页面功能,能直接把你的自定义子菜单注册成ACF选项页面,自动处理字段的加载与保存,无需额外写逻辑。
操作步骤:
- 替换子菜单注册代码:删掉原来的
add_custom_page_to_menu函数,改用ACF的专用函数注册子菜单:
function add_custom_dealer_options_page() { acf_add_options_sub_page(array( 'page_title' => __('Dealer Vivafloors', 'text_domain'), 'menu_title' => __('Dealer Vivafloors', 'text_domain'), 'parent_slug' => 'edit.php?post_type=dealer', // 绑定到Dealers自定义Post Type菜单 'capability' => 'edit_posts', 'menu_slug' => 'dealer-vivafloors', )); } add_action('acf/init', 'add_custom_dealer_options_page');
- 配置ACF字段组:在ACF后台新建字段组,设置位置规则为:
选项页面→等于→Dealer Vivafloors,添加你需要的字段即可。
完成后访问子菜单页面,就能直接看到并编辑ACF字段,保存逻辑由ACF自动处理。
方案二:手动在回调函数中渲染并处理ACF字段
如果不想用选项页面,也可以手动在回调里渲染字段,同时实现保存逻辑。
操作步骤:
- 修改回调函数:更新
call_back_function,添加表单提交处理和ACF字段渲染代码:
function call_back_function() { // 处理表单提交,验证权限与防CSRF if (isset($_POST['acf'], $_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'acf_nonce')) { // 将字段保存到wp_options表,用自定义标识区分 foreach ($_POST['acf'] as $field_key => $value) { update_field($field_key, $value, 'vivafloors_special_dealer'); } echo '<div class="notice notice-success"><p>设置已保存</p></div>'; } // 渲染ACF表单 acf_form(array( 'post_id' => 'vivafloors_special_dealer', // 自定义存储标识 'field_groups' => array('group_xxxxxx'), // 替换为你的ACF字段组ID 'submit_value' => __('保存设置', 'text_domain'), 'html_before_fields' => '<h1>' . __('Dealer Vivafloors', 'text_domain') . '</h1>', )); }
- 字段组配置:在ACF字段组编辑页面,复制字段组ID(可从URL的
post=xxx参数获取),替换代码中的group_xxxxxx。
注意事项:
- 字段会以
field_{字段键}_vivafloors_special_dealer为键,存储在wp_options表中,前端调用时用get_field('字段键', 'vivafloors_special_dealer')获取。 - 确保当前用户拥有
edit_posts权限,避免非法提交。
内容的提问来源于stack exchange,提问作者Mr. Sam
相关产品推荐
相关产品推荐

