删除由另一个插件-WooCommerce注册的Metabox

时间:2014-02-19 作者:JorgeLuisBorges

我正在尝试删除WooCommerce添加的gallery metabox-它已在更新中添加,但我已经有了gallery metabox,我不想混淆客户端。

显然,我可以破解插件,但我想从功能上做到这一点。php

我尝试过:

function remove_my_meta_boxes() {
    remove_meta_box( \'woocommerce-product-images\',  \'product\', \'side\');
}
add_action( \'admin_menu\' , \'remove_my_meta_boxes\', 40 );
它似乎不起作用

添加它的代码似乎是

public function __construct() {
add_action( \'add_meta_boxes\', array( $this, \'add_meta_boxes\' ), 30 );
}
以及

public function add_meta_boxes() {
    add_meta_box( \'woocommerce-product-images\', __( \'Product Gallery\', \'woocommerce\' ), \'WC_Meta_Box_Product_Images::output\', \'product\', \'side\' );
}
我已经删除了不相关的部分,如其他已注册的元数据库等。

2 个回复
最合适的回答,由SO网友:kaiser 整理而成

在他们的GitHub repo 显示以下行:

add_meta_box(
    \'woocommerce-product-images\',
    __( \'Product Gallery\', \'woocommerce\' ),
    \'WC_Meta_Box_Product_Images::output\',
    \'product\',
    \'side\'
);
所以你的电话remove_meta_box() 使用正确的id/句柄/名称以及正确的优先级和上下文。

问题只在于钩子和钩子执行的优先级-您必须在WooCommerce插件之后注销registers the boxes. 否则,您将尝试注销尚未注册的内容。

add_action( \'add_meta_boxes\' , \'remove_my_meta_boxes\', 40 );
function remove_my_meta_boxes()
{
    remove_meta_box( \'woocommerce-product-images\',  \'product\', \'side\');
}

SO网友:s_ha_dum

应该可以删除该元数据库,但必须在添加后将其删除。我认为您正试图使用priority参数来实现这一点,但您也使用了另一个钩子,如果是memory server,那么它会在插件使用的钩子之前运行。

function remove_my_meta_boxes() {
    remove_meta_box( \'woocommerce-product-images\',  \'product\', \'side\');
}
add_action( \'add_meta_boxes\' , \'remove_my_meta_boxes\', 40 );

结束