将自定义 Metabox 添加到启用了 HPOS 的 WooCommerce 管理订单

问题描述 投票:0回答:1

我正在尝试在仪表板的 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”,就像一些人在其他线程中建议的那样,但似乎没有任何效果。

有人有想法吗?

php wordpress woocommerce hook-woocommerce orders
1个回答
0
投票

此问题与启用了高性能订单存储(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,均可正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.