You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用HPOS后如何移除WooCommerce订单编辑页面的Meta Boxes

移除HPOS模式下WooCommerce订单编辑页面的指定Meta Boxes

问题原因

启用High-Performance Order Storage (HPOS)后,WooCommerce不再将订单作为传统的shop-order自定义文章类型处理,而是采用独立订单数据表重构了后台订单编辑界面,原生WordPress的remove_meta_box()函数不再适配这套新逻辑,导致旧代码失效。而CSS隐藏仅做视觉遮挡,Meta Box的加载逻辑依然存在,既不安全也有性能隐患。

解决方案

方法一:使用WooCommerce专属过滤器(推荐)

通过woocommerce_admin_order_meta_boxes过滤器直接修改Meta Box列表,同时兼容HPOS与非HPOS环境:

add_filter( 'woocommerce_admin_order_meta_boxes', 'custom_remove_order_meta_boxes' );
function custom_remove_order_meta_boxes( $meta_boxes ) {
    // 检查HPOS是否启用
    $hpos_enabled = class_exists( 'Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController' ) 
                    && wc_get_container()->get( 'Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController' )->is_usage_enabled();

    if ( ! $hpos_enabled ) {
        // 非HPOS环境,使用原生方法移除
        remove_meta_box( 'woocommerce-order-items', 'shop-order', 'normal' );
        remove_meta_box( 'woocommerce-order-actions', 'shop-order', 'side' );
        remove_meta_box( 'woocommerce-order-notes', 'shop-order', 'side' );
        remove_meta_box( 'order_custom', 'shop-order', 'normal' );
        return $meta_boxes;
    }

    // HPOS环境,移除对应Meta Box
    unset( $meta_boxes['normal']['woocommerce-order-items'] );
    unset( $meta_boxes['side']['woocommerce-order-actions'] );
    unset( $meta_boxes['side']['woocommerce-order-notes'] );
    unset( $meta_boxes['normal']['order_custom'] );

    return $meta_boxes;
}

方法二:通过移除注册动作实现

针对HPOS环境,直接取消Meta Box的注册动作,适合精准控制单个Meta Box的移除:

add_action( 'init', 'custom_remove_hpos_order_meta_boxes' );
function custom_remove_hpos_order_meta_boxes() {
    $hpos_enabled = class_exists( 'Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController' ) 
                    && wc_get_container()->get( 'Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController' )->is_usage_enabled();

    if ( ! $hpos_enabled ) {
        // 非HPOS环境的移除逻辑
        remove_meta_box( 'woocommerce-order-items', 'shop-order', 'normal' );
        remove_meta_box( 'woocommerce-order-actions', 'shop-order', 'side' );
        remove_meta_box( 'woocommerce-order-notes', 'shop-order', 'side' );
        remove_meta_box( 'order_custom', 'shop-order', 'normal' );
        return;
    }

    // 移除WooCommerce内置Meta Box的注册动作
    remove_action( 'woocommerce_hpos_register_meta_boxes', array( 'WC_Meta_Box_Order_Items', 'add_meta_box' ) );
    remove_action( 'woocommerce_hpos_register_meta_boxes', array( 'WC_Meta_Box_Order_Actions', 'add_meta_box' ) );
    remove_action( 'woocommerce_hpos_register_meta_boxes', array( 'WC_Meta_Box_Order_Notes', 'add_meta_box' ) );

    // 如果是自定义Meta Box,请替换为你的注册函数名
    // remove_action( 'woocommerce_hpos_register_meta_boxes', 'your_custom_meta_box_registration_function' );
}

注意事项

  • 代码需添加到主题的functions.php文件或自定义插件中;
  • 对于自定义Meta Boxorder_custom,需确保其在HPOS环境下是通过WooCommerce的HPOS兼容方式注册的,否则需调整移除逻辑;
  • 测试前请备份网站数据,避免出现意外问题。

内容的提问来源于stack exchange,提问作者atmomin2003

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:26:18