在订单ID中添加前缀后在数据库中找不到订单号
我使用了以下代码,它仅对管理员有效。但是当我发送该订单时,却找不到错误的订单号。
<label>
<input type="checkbox" name="" />
<span class="cb-icon"></span>
</label>
<label>
<input type="checkbox" name="" />
<span class="cb-icon"></span>
</label>
管理员和显示订单号带有前缀(例如我的订单号)为101的电子邮件 它将保存在订单号为101的数据库中,但显示在前端CK-101上。但是当我发送该订单时,在数据库中找不到订单ID CK-101,并向我发送错误消息。
请帮助。 预先感谢。
答案 0 :(得分:-1)
您的函数仅在admin,前端,电子邮件等中添加前缀,但不在数据库中添加。因此,您会收到错误消息。
使用以下功能将其保存到数据库中
add_action( 'wp_insert_post', 'set_sequential_order_number', 10, 2 );
add_action( 'woocommerce_process_shop_order_meta', 'set_sequential_order_number', 10, 2 );
function set_sequential_order_number( $post_id, $post ) {
global $wpdb;
if ( 'shop_order' === $post->post_type && 'auto-draft' !== $post->post_status ) {
$order = wc_get_order( $post_id );
$order_number = self::get_order_meta( $order, '_order_number' );
if ( '' === $order_number ) {
// attempt the query up to 3 times for a much higher success rate if it fails (due to Deadlock)
$success = false;
for ( $i = 0; $i < 3 && ! $success; $i++ ) {
// this seems to me like the safest way to avoid order number clashes
$query = $wpdb->prepare( "
INSERT INTO {$wpdb->postmeta} (post_id, meta_key, meta_value)
SELECT %d, '_order_number', IF( MAX( CAST( meta_value as UNSIGNED ) ) IS NULL, 1, MAX( CAST( meta_value as UNSIGNED ) ) + 1 )
FROM {$wpdb->postmeta}
WHERE meta_key='_order_number'",
$post_id );
$success = $wpdb->query( $query );
}
}
}
}
或使用下面的插件,其中包括所有功能,包括您已经在使用的功能
https://wordpress.org/plugins/woocommerce-sequential-order-numbers/
希望有帮助。