首页 > 解决方案 > 在 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 后端手动创建订单时出现这样的错误。

在此处输入图像描述

我怎样才能防止这种情况?

标签: wordpressdatewoocommercebackendorders

解决方案


您的代码包含一些错误

  • 使用$order = wc_get_order( $order_id );不是必需的,因为$order已经传递给函数
  • $order->id自 WooCommerce 3 (2017) 以来已被替换为$order->get_id()
  • $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 );

推荐阅读