获取自定义订单项元键并显示在 WooCommerce 订单视图的新列中

问题描述 投票:0回答:1

我正在尝试在 WooCommerce 订单表视图中创建一个新列。并使用订单中自定义元键的详细信息填充它。仅当购买者选择交货日期时,只有部分订单才会具有此元键值。使用 WooCommerce Product Add-Ons Ultimate 插件将交货日期选项添加到订单中。

我已成功创建新列,但似乎无法显示自定义元键的结果,即

_Choose Date
每个订单都会返回输出“元键”错误或未找到订单项的输出,即如果不存在值会显示什么。

我的代码在这里:

function custom_shop_order_column( $columns ) {
    // Add new columns
    $columns['delivery_date'] = __( 'Delivery Date', 'woocommerce' ); 
    return $columns;
}
add_filter( 'manage_edit-shop_order_columns', 'custom_shop_order_column', 10, 1 );

//  Populate the Column
function custom_shop_order_list_column_content( $column, $post_id ) {
    // Get order object
    $order = wc_get_order( $post_id );

    // Is a WC_Order
    if ( is_a( $order, 'WC_Order' ) ) {
        // Initialize
         $delivery_date_arr = array();
        
        // Loop trough order items
        foreach ( $order->get_items() as $item_key => $item ) {
            // Get meta, use the correct meta key!
            $delivery_date = $item->get_meta( '_Choose Date' );
            
            // NOT empty
            if ( ! empty ( $delivery_date ) ) {
                // Push to array
                $delivery_date_arr[] = $delivery_date;
            }
            
        }
        
        // Compare column name
        if ( $column == 'delivery_date' ) {
            // NOT empty
            if ( ! empty ( $delivery_date_arr ) ) {
                // Output
                echo '<ul>';
                echo '<li>' . implode( '</li><li>', $delivery_date_arr ) . '</li>';
                echo '</ul>';
            } else {
                // Output
                echo __( 'Meta key is wrong or not found for the order items', 'woocommerce' );
            }
        }
   
    }
}
add_action( 'manage_shop_order_posts_custom_column' , 'custom_shop_order_list_column_content', 10, 2 );```
php wordpress woocommerce metadata orders
1个回答
0
投票

当您获得正确的元密钥时,这是改进的版本代码:

// Add new columns
add_filter( 'manage_edit-shop_order_columns', 'custom_shop_order_column', 10, 1 );
function custom_shop_order_column( $columns ) {
    $columns['delivery_date'] = __( 'Delivery Date', 'woocommerce' ); 
    return $columns;
}

//  Populate the Column
add_action( 'manage_shop_order_posts_custom_column' , 'custom_shop_order_list_column_content', 10, 2 );
function custom_shop_order_list_column_content( $column, $post_id ) {
    if ( $column === 'delivery_date' ) {
        global $the_order; // The order object
    
        $delivery_dates_html = ''; // Initialize

        // Loop trough order items
        foreach ( $the_order->get_items() as  $item ) {
            // Get meta, use the correct meta key!
            if ( $delivery_date = $item->get_meta( 'Choose Delivery Date' ) ) {
                $delivery_dates_html .= '<li>' . $delivery_date . '</li>';
            }
        }
        
        if (! empty( $delivery_dates_html ) > 0 ) {
            echo '<ul>' . $delivery_dates_html . '</ul>';
        } else {
            _e("No date", "woocommerce");
        }
    }
}

它应该能更好地工作。

© www.soinside.com 2019 - 2024. All rights reserved.