_order_key (Order Key) 和 post_id (Order ID) 字段不同。
- 您在 WooCommerce 后端看到的 订单号 是
post_id
Wordpress 数据库的wp_posts 表的字段。
-
order key 改为引用 Wordpress 数据库的
wp_postmeta 表的 _order_key (meta_key) 字段。
woocommerce_generate_order_key 过滤器记录在 here 中,如您所见,您不能使用它从订单的 _order_key 字段中删除 wc_ 前缀。这是source code的摘录:
/**
* Generate an order key with prefix.
*
* @since 3.5.4
* @param string $key Order key without a prefix. By default generates a 13 digit secret.
* @return string The order key.
*/
function wc_generate_order_key( $key = '' ) {
if ( '' === $key ) {
$key = wp_generate_password( 13, false );
}
return 'wc_' . apply_filters( 'woocommerce_generate_order_key', 'order_' . $key );
}
如果您想操作 WooCommerce 订单密钥,您必须使用 WC_Order 类的 set_order_key() 方法。 Here 你可以找到文档。
您还需要更新wp_posts 表中的订单post_password 字段。
因此,例如,如果您想为每个新订单设置自定义订单键(删除 wc_ 前缀),您可以使用这个功能:
// removes the "wc_" prefix from the WooCommerce order key field for each new order
add_action( 'woocommerce_new_order', 'set_custom_order_key', 99, 2 );
function set_custom_order_key( $order_id, $order ) {
// get the order object
$order = wc_get_order( $order_id );
// gets the current order key
$order_key = $order->get_order_key();
// remove the "wc_" prefix
$new_order_key = str_replace( 'wc_', '', $order_key );
// updates the "_order_key" field of the "wp_postmeta" table
$order->set_order_key( $new_order_key );
$order->save();
// updates the "post_password" field of the "wp_posts" table
$post = get_post( $order_id );
$post->post_password = $new_order_key;
wp_update_post( $post );
}
代码已经过测试并且可以运行。将其添加到活动主题的 functions.php 中。
如果您想操作 WooCommerce 订单 ID,您必须使用 woocommerce_order_number 过滤器。可以在here找到文档。
你可以在这里找到一些例子: