如何仅在Shop Orders中启用ACF元框?现有代码条件不生效
解决ACF仅在Shop Orders中启用元框的问题
你之前的代码失效是因为admin_init钩子触发时机过早,此时当前编辑的文章类型还未初始化,get_post_type()无法正确获取到shop_order,导致条件判断不生效。
正确的做法是直接利用ACF提供的acf/settings/remove_wp_meta_box过滤器,在回调函数中动态判断当前场景:
add_filter('acf/settings/remove_wp_meta_box', 'enable_acf_metabox_for_shop_orders'); function enable_acf_metabox_for_shop_orders($remove) { // 获取当前后台屏幕信息 $screen = get_current_screen(); // 判断当前是否为Shop Orders编辑页面 if ($screen && $screen->post_type === 'shop_order') { return false; // 启用ACF元框 } return true; // 其他文章类型保持禁用 }
或者通过全局$post对象判断(适用于编辑已有订单的场景):
add_filter('acf/settings/remove_wp_meta_box', 'enable_acf_metabox_for_shop_orders'); function enable_acf_metabox_for_shop_orders($remove) { global $post; if ($post && $post->post_type === 'shop_order') { return false; } return true; }
这两种方式都能在ACF决定是否移除元框的关键节点,准确判断当前页面类型,从而实现仅在Shop Orders中启用ACF元框的需求。
内容的提问来源于stack exchange,提问作者Demian
相关产品推荐
相关产品推荐

