我正在尝试在仪表板的 woocommerce 订单页面上添加一个新的元框。
add_action( 'add_meta_boxes', 'add_meta_box_wrapper' );
function add_meta_box_wrapper() {
add_meta_box( 'custom_meta_box', __( 'Facture' ), 'metabox_content', 'shop_order', 'side', 'core');
}
function metabox_content() {
echo '<a>Test button</a>';
}
这是我尝试过的代码,但似乎不起作用。
如果我更改要发布的 add_meta_box 函数的第四个参数,我可以让它显示在帖子编辑页面中,所以问题一定出在我正在使用的 slug 上。我还尝试将该参数更改为“wc-orders”,并将操作挂钩更改为“add_meta_boxes_shop_order”和“add_meta_boxes_wc-orders”,就像一些人在其他线程中建议的那样,但似乎没有任何效果。
有人有想法吗?
此问题与启用了高性能订单存储(HPOS)有关,因此您需要一些不同的东西来将自定义 Metabox 添加到管理订单:
use Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController;
// Add a custom metabox
add_action( 'add_meta_boxes', 'admin_order_custom_metabox' );
function admin_order_custom_metabox() {
$screen = class_exists( '\Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController' ) && wc_get_container()->get( CustomOrdersTableController::class )->custom_orders_table_usage_is_enabled()
? wc_get_page_screen_id( 'shop-order' )
: 'shop_order';
add_meta_box(
'custom',
'Custom Meta Box',
'custom_metabox_content',
$screen,
'side',
'high'
);
}
// Metabox content
function custom_metabox_content( $object ) {
// Get the WC_Order object
$order = is_a( $object, 'WP_Post' ) ? wc_get_order( $object->ID ) : $object;
echo '<p>Number (ID): '.$order->get_order_number().'<p>';
echo '<a>Test button</a>';
}
代码位于子主题的functions.php 文件中(或插件中)。经过测试,无论启用或不启用 HPOS,均可正常工作。