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

时间:2019-06-19 13:18:46

标签: php wordpress woocommerce hook-woocommerce woocommerce-rest-api

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

Booster提供原始订单ID remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart'); remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 20);

的简码

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

[wcj_order_id]

enter image description here

如何在“编辑订单”页面上插入简码?

(Woocommerce /订单/ [选择订单/订单详细信息],例如<h2 class="woocommerce-order-data__heading"> Order #WC-63872414 details</h2>

1 个答案:

答案 0 :(得分:1)

我研究了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文件中。
Tested&Wordking

Screenshot

注释:
1. Booster代码中的过滤器挂钩使用PHP_INT_MAX优先级,因此为了覆盖此优先级,我们不能使用较大的整数优先级。因此,在其他插件完成工作后,我使用admin_init操作将函数挂钩到woocommerce_order_number。它可能会按预期运行,而无需使用init钩子,但不能保证。您也可以使用init钩子代替admin_init在站点的前端添加WC order_id(例如,“我的帐户”页面)。阅读代码中的注释。
2.要删除由Booster插件在管理页面上生成的订单ID,您可以更改以下行:

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

收件人:

return do_shortcode('[wcj_order_id]');