我们使用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]
如何在“编辑订单”页面上插入简码?
(Woocommerce /订单/ [选择订单/订单详细信息],例如<h2 class="woocommerce-order-data__heading">
Order #WC-63872414 details</h2>
答案 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_Numbers
和WC_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 :
注释:
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]');