在编辑订单页面的自定义 Woocommerce 订单号下方添加 order_id

Add order_id beneath custom Woocommerce Order Number on Edit Order page

我们使用 Booster 插件创建一个唯一的 WooCommerce 订单号,例如 WC-456544646。我现在需要添加仍在后台运行的原始 order_id 以及 WooCommerce API.

Booster 为原始订单 ID 提供简码 [wcj_order_id]

这是“编辑订单”页面上自定义 Woo 订单号的HTML。

<h2 class="woocommerce-order-data__heading">
Order #WC-63872414 details</h2>

如何在 'Edit Order' 页面上插入短代码?

(Woocommerce/Orders/[Select Order/Order 详情] 例如 /post.php?post=638&action=edit

我查看了 Booster 插件代码。它使用 woocommerce_order_number 过滤器钩子来替换 WC 编辑订单页面和订单中的订单 ID。在 /woocommerce-jetpack/includes/class-wcj-order-numbers.php 中:

add_filter( 'woocommerce_order_number', array( $this, 'display_order_number' ), PHP_INT_MAX, 2 );

因为它没有在任何操作挂钩中传递 WCJ_Order_NumbersWC_Jetpack 类 的 $instance,为了删除此文本并使用自定义文本,我们不能使用 remove_filter 函数。所以要覆盖 Booster 插件,我们必须将另一个函数挂接到 woocommerce_order_number.

要将 WC order_id 添加到管理员订单页面:

add_action( 'admin_init', 'append_wc_order_id');
function append_wc_order_id()
{
    add_filter('woocommerce_order_number', 'filter_wc_order_id', PHP_INT_MAX);
    function filter_wc_order_id($order_id)
    {
        /* If you are using 'init' action hook, uncomment bellow line to apply this code only to your admin pages: */
        //if (!is_admin()) return $order_id;
        return $order_id . ' | #' . do_shortcode('[wcj_order_id]');
    }
}

此代码会转到您的 functions.php 主题文件。
经过测试和 Wordking:

备注:
1. Booster 代码中的过滤器挂钩使用 PHP_INT_MAX 优先级,因此为了覆盖它,我们不能使用更大的整数优先级。因此,在其他插件完成它们的工作后,我使用 admin_init 操作将我的函数挂接到 woocommerce_order_number。在不使用 init 挂钩的情况下,它可能会按您预期的方式运行,但不能保证。您也可以使用 init 挂钩而不是 admin_init 在站点的 front-end 侧添加 WC order_id(例如 'My Account' 页面)。阅读代码内的注释。
2. 要删除管理页面上由 Booster 插件生成的订单 ID,您可以更改此行:

return $order_id . ' | #' . do_shortcode('[wcj_order_id]');

至:

return do_shortcode('[wcj_order_id]');