Ваша функция просто добавляет префикс в 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/
Надеюсь, это поможет.