在 WooCommerce 中手动创建订单时,将创建日期添加到订单号

Issue adding date created to order number when creating order manually in WooCommerce

我使用下面的代码修改WooCommerce中的订单号。

add_filter( 'woocommerce_order_number', 'change_woocommerce_order_number', 1, 2);

function change_woocommerce_order_number( $order_id, $order ) {
    $prefix = '160-';
    // you will need to get your city as a variable to pass in to priffix 
    $order = wc_get_order( $order_id );
    $order_date = $order->get_date_created();
    $date_created = $order_date->date( 'Ymd' );
    
   
    // You can use either one of $order->id (or) $order_id
    // Both will wor
    return $prefix . $order->id . '-'.$date_created;
}   

此代码在结帐过程中有效,但当我在 WooCommerce 后端手动创建订单时出现这样的错误。

我怎样才能避免这种情况?

试试这个代码。

替换此行。

 $order_date = $order->get_date_created();
 $date_created = $order_date->date( 'Ymd' );

$date_created = $order->get_date_created()->date('Ymd');

您的代码有一些错误

  • 不需要使用 $order = wc_get_order( $order_id );,因为 $order 已经传递给函数
  • $order->id 自 WooCommerce 3 (2017) 以来已被替换为 $order->get_id()
  • 但是,此答案不需要 using/replacing $order->get_id(),因为它也传递给了函数
  • 下订单时不会出现错误,但当你想在后台创建新订单时会出现(你就是这种情况)。仅仅是因为订单尚未创建,并且该值尚不存在

所以你得到

function filter_woocommerce_order_number( $order_number, $order ) { 
    // Prefix
    $prefix = '160-';
    
    // Is null
    if ( is_null( $order->get_date_created() ) ) {
        $order->set_date_created( new WC_DateTime() );
    }
    
    // Get date created
    $date_created = $order->get_date_created()->date( 'Ymd' );

    return $prefix . $order_number . '-' . $date_created;
}
add_filter( 'woocommerce_order_number', 'filter_woocommerce_order_number', 10, 2 );