将列创建日期和订单号添加到 WooCommerce 我的帐户订单

Add columns date created and order number to WooCommerce My account Orders

我想将两种类型的元数据添加到订单及其创建时 order_items。我尝试了一些方法,但没有用。

首先我要补充的是$order->get_date_created();作为订单的元数据。

// Add order date as order meta data
add_action( 'woocommerce_checkout_create_order', 'add_order_date_to_order_meta_data', 10, 2 );
function add_order_date_to_order_meta_data( $order, $data ) {
  $order_date = $order->get_date_created();

        $order->update_meta_data( 'order_created', $order_date );
}

第二个是$order->get_id();我想将订单本身添加到 order_items

// Add order number as order meta data
add_action( 'woocommerce_checkout_create_order', 'add_order_number_to_order_meta_data', 10, 2 );
function add_order_number_to_order_meta_data( $order, $data ) {
  $order_id = $order->get_id();

        $order->update_meta_data( 'order_number', $order_id );
}

我对如何将其添加到订单行一无所知。不知道如何做到这一点。我发现了以下内容,但我认为这是在创建订单之前添加信息?

add_action( 'woocommerce_checkout_create_order_line_item', 'add_meta_to_line_item', 20, 4 );
 
function add_meta_to_line_item( $item, $cart_item_key, $values, $order )
{
    $_p = $item->get_product();
    $key = $order->get_id();
 
    if ( false !== ( $value = $_p->get_meta( $key, true ) ) )
        $item->add_meta_data( $key, true);
    }

然后我创建这些元字段后,我还想将它们添加到前端的订单概览中的一个列中。

/**
 * Adds a new column to the "My Orders" table in the account.
 *
 * @param string[] $columns the columns in the orders table
 * @return string[] updated columns
 */
function metavalue_add_my_account_orders_column( $columns ) {

    $new_columns = array();

    foreach ( $columns as $key => $name ) {

        $new_columns[ $key ] = $name;

        // add meta_value after order status column
        if ( 'order-status' === $key ) {
            $new_columns['order_number'] = __( 'Order Number', 'textdomain' );
            $new_columns['order_created'] = __( 'Order Created', 'textdomain' );
        }
    }

    return $new_columns;
}
add_filter( 'woocommerce_my_account_my_orders_columns', 'metavalue_add_my_account_orders_column' );

我希望有人能在正确的方向上帮助我。

已更新 - 您的代码中存在一些错误和缺失。请尝试以下操作:

// Add order number and order date creation as order meta data
add_action( 'woocommerce_checkout_create_order', 'add_some_order_meta_data', 10, 2 );
function add_some_order_meta_data( $order, $data ) {
    $order->update_meta_data( '_order_number', $order->get_id() );
    $order->update_meta_data( 'order_date', current_time('Y-m-d H:i:s') );
}

// Add order Id as custom order item meta data
add_action( 'woocommerce_checkout_create_order_line_item', 'add_meta_to_line_item', 10, 4 );
function add_meta_to_line_item( $item, $cart_item_key, $values, $order ) {
    $item->add_meta_data( '_order_id', $order->get_id() );
}

// Include order number meta data for the method get_order_number()
add_filter( 'woocommerce_order_number', 'wc_set_order_number', 10, 2 );
function wc_set_order_number( $order_id, $order ) {
    // Get the order number (custom meta data)
    $order_number = $order->get_meta('_order_number');

    return $order_number ? $order_number : $order_id;
}

// Add columns to my account orders
add_filter( 'woocommerce_my_account_my_orders_columns', 'add_my_account_orders_columns' );
function add_my_account_orders_columns( $columns ) {
    $new_columns = array();

    foreach ( $columns as $key => $name ) {

        $new_columns[ $key ] = $name;

        // add meta_value after order status column
        if ( 'order-status' === $key ) {
            $new_columns['number'] = __( 'Order Number', 'textdomain' );
            $new_columns['date-created'] = __( 'Date Created', 'textdomain' );
        }
    }

    return $new_columns;
}

// Column order number content
add_action( 'woocommerce_my_account_my_orders_column_number', 'my_account_order_number_column_content', 10, 1 );
function my_account_order_number_column_content( $order ) {
    echo $order->get_order_number();
}

// Column order date created content
add_action( 'woocommerce_my_account_my_orders_column_date-created', 'my_account_order_date_created_column_content', 10, 1 );
function my_account_order_date_created_column_content( $order ) {
    echo $order->get_meta('order_date') ? $order->get_meta('order_date') : $order->get_date_created()->date('Y-m-d H:i:s');
}

代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。


备注:

要获取订单号,您将使用来自订单对象的 WC_Order 方法 get_order_number()

您可以按照 in here WC_Date_time date() 方法的说明更改保存的日期格式。

对于存储为 自定义订单项元数据 的订单 ID,元键需要以下划线开头,以使其在客户订单和电子邮件通知中不可见。因此,要从订单项目中获取它,您将在 WC_Order_Item_Product 对象 $item 变量上使用 WC_Data get_meta() 方法,例如 $item->get_meta( '_order_id') 或者您也可以使用方法 get_order_id()喜欢$item->get_order_id()


相关:

  • ?