簡體   English   中英

在 Woocommerce 的管理員編輯訂單頁面上顯示每個特定訂單的所有可用運輸方式

[英]Display ALL available shipping methods for each specific order on admin edit order pages in Woocommerce

在我的基於 WooCommerce 的網站的結帳頁面上,用戶將有一個運輸方式列表可供選擇,具體取決於他們購買的商品

這是我要捕獲的列表:

這是我要捕獲的列表


  • 超過一定價格的訂單“免運費”
  • 某些物品的“貨運”,等等。

我的目標是顯示每個特定訂單的所有可用方法,並將其顯示在管理視圖的“編輯訂單/訂單詳細信息”頁面上。

一個小功能可以幫助我們快速識別人們更常選擇的選項,具體取決於他們可用的選項。

這是我到目前為止所擁有的:

add_action( 'woocommerce_checkout_update_order_meta', 'save_available_shipping_methods' );
 
function save_available_shipping_methods( $order_id ) {
    $shippingmethods = WC()->cart->get_shipping_methods();
    update_post_meta( $order_id, '_shipping_methods', $shippingmethods );
}

add_action( 'woocommerce_admin_order_data_after_shipping_address', 'get_available_shipping_methods', 10, 1 );

function get_available_shipping_methods($order){
    $order = wc_get_order( $order_id );
    if ( $order ) {
        echo '<p><strong>'.__('Available Shipping Methods: ').'</strong> ' . get_post_meta($order->get_shipping_methods(), '_shipping_field_value', true ) . '</p>';
    }
}

我也會附上一張圖片,也許會讓事情更容易理解。

這就是我想放的地方。 當前掛鈎將字段置於送貨地址下方

這就是我想放的地方。當前掛鈎將字段置於送貨地址下方

  • woocommerce_checkout_update_order_meta掛鈎中,可用的運輸包裹通過update_post_meta存儲
  • 在代碼中添加解釋的注釋
function action_woocommerce_checkout_update_order_meta( $order_id ) {
    // Get shipping packages
    $packages = WC()->shipping()->get_packages();
    
    // Set array
    $rate_labels = array();
    
    // Loop trough packages
    foreach ( $packages as $key => $package ) {
        // Loop through package rates
        foreach( $package['rates'] as $rate_id => $rate ) {
            // Push to array
            $rate_labels[] = $rate->get_label();
        }
    }

    // NOT empty
    if ( ! empty ( $rate_labels ) ) {
        // Update post meta
        update_post_meta( $order_id, '_available_shipping_methods', $rate_labels );
    }
}
add_action( 'woocommerce_checkout_update_order_meta', 'action_woocommerce_checkout_update_order_meta', 10, 1 ); 

// Display on the order edit page (backend)
function action_woocommerce_admin_order_data_after_shipping_address( $order ) {
    // Get meta
    $rate_labels = $order->get_meta( '_available_shipping_methods' );
    
    // True
    if ( $rate_labels ) {
        // Loop trough rate labels
        foreach( $rate_labels as $rate_label ) {
            // Output
            echo '<p>' . $rate_label . '</p>';
        }
    }
}
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'action_woocommerce_admin_order_data_after_shipping_address', 10, 1 );

如果有人想知道,這是最終結果。 它將遍歷每個訂單以查找當時可用的運輸方式,以及報價的多少。

 // Capture the available shipping methods, and costs: 
      function action_woocommerce_checkout_update_order_meta( $order_id ) {
      // Get shipping packages
         $packages = WC()->shipping()->get_packages();
        
    // Set array
    $rate_labels = array();
    $rate_costs = array();
    
    // Loop trough packages
    foreach ( $packages as $key => $package ) {
        // Loop through package rates
        foreach( $package['rates'] as $rate_id => $rate ) {
            // Push to array
            $rate_labels[] = $rate->get_label();
            $rate_costs[] = $rate->get_cost();
        }
    }

    // NOT empty
    if ( ! empty ( $rate_labels ) ) {
        // Update post meta
        update_post_meta( $order_id, '_available_shipping_methods', $rate_labels );
        update_post_meta( $order_id, '_available_shipping_method_cost', $rate_costs );
    }
}
add_action( 'woocommerce_checkout_update_order_meta', 'action_woocommerce_checkout_update_order_meta', 10, 1 ); 

// Make it display on the edit order page:
function action_woocommerce_admin_order_data_after_shipping_address( $order ) {
    // Get meta
    $rate_labels = $order->get_meta( '_available_shipping_methods' );
    $rate_costs = $order->get_meta( '_available_shipping_method_cost' );
    
    $methods = array ( $rate_labels, $rate_costs );
    
    // True
    if ( $rate_labels ) {
        // Loop
        echo '<p><strong>Shipping Methods: </strong>';
        foreach(array_combine($rate_labels, $rate_costs) as $rate_label => $rate_cost) {
             echo '<p>' . $rate_label . ' - $' . $rate_cost . '</p>';
        }
    }
    
}
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'action_woocommerce_admin_order_data_after_shipping_address', 10, 1 );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM