2017-03-13 5 views
0


に基づいて利用可能な配送方法のリストを得ることは可能ですか?合計金額および/または国コードのみですか?(満杯の)ショッピングカートのない配送方法のリスト

自分でSQLクエリを作成することで可能ですが、標準のWoo-commerce関数でも可能かどうか疑問に思っていました。

私は機能でそれを試してみた:

$shipping_methods = WC()->shipping->get_shipping_methods(), 

が、それは国やコストをフィルタリングすることなく、私のすべての配送方法を提供します。例えば : local_pickupは

[local_pickup] => WC_Shipping_Local_Pickup Object 
    (
     [supports] => Array 
      (
       [0] => shipping-zones 
       [1] => instance-settings 
       [2] => instance-settings-modal 
      ) 

     [id] => local_pickup 
     [method_title] => Afhalen 
     [method_description] => Sta klanten toe bestellingen zelf op te halen. Standaard worden winkelgebaseerde belastingen toegepast wanneer gekozen is voor lokaal ophalen, onafhankelijk van het adres van de klant. 
     [enabled] => yes 
     [title] => 
     [rates] => Array 
      (
      ) 

     [tax_status] => 
     [fee] => 
     [minimum_fee] => 
     [instance_id] => 0 
     [instance_form_fields] => Array 
      (
       [title] => Array 
        (
         [title] => Titel 
         [type] => text 
         [description] => Dit bepaalt de titel die de gebruiker ziet tijdens het afrekenen. 
         [default] => Afhalen 
         [desc_tip] => 1 
        ) 

       [tax_status] => Array 
        (
         [title] => Belastingstatus 
         [type] => select 
         [class] => wc-enhanced-select 
         [default] => taxable 
         [options] => Array 
          (
           [taxable] => Belastbaar 
           [none] => Geen 
          ) 

        ) 

       [cost] => Array 
        (
         [title] => Kosten 
         [type] => text 
         [placeholder] => 0 
         [description] => Optionele kosten voor afhalen. 
         [default] => 
         [desc_tip] => 1 
        ) 

      ) 

     [instance_settings] => Array 
      (
      ) 

     [availability] => 
     [countries] => Array 
      (
      ) 

     [plugin_id] => woocommerce_ 
     [errors] => Array 
      (
      ) 

     [settings] => Array 
      (
       [title] => 
       [tax_status] => 
       [cost] => 
      ) 

     [form_fields] => Array 
      (
      ) 

     [data:protected] => Array 
      (
      ) 

     [cost] => 
    ) 

次のようになります。私は、次のコードを試してみましたが、私はまったく結果を得るません。

print_r (WC()->shipping->calculate_shipping(get_shipping_packages())); 
die('ready'); 

function get_shipping_packages(){ 
    global $wpdb, $woocommerce; 

    // Clear the Cart 
    $woocommerce->cart->empty_cart(); 

    // Add an existing product to the cart, so $packages[0]['contents'] will not be empty... 
    $product_id = 26; 
    WC()->cart->add_to_cart($product_id); 

    $packages = array(); 
    $packages[0]['contents']    = WC()->cart->cart_contents; 
    $packages[0]['contents_cost']   = 25; 
    $packages[0]['destination']['country'] = 'NL'; 
    $packages[0]['destination']['state'] = null; 
    $packages[0]['destination']['postcode'] = null; 
    $packages[0]['destination']['city']  = null; 
    $packages[0]['destination']['address'] = null; 

    return ($packages); 
} 
+0

は、追加のコードで、$ shipping_methodsの結果をフィルタリングしてもらえますか? – terrorfall

+0

結果にはジェネリックのデータのみが含まれており、国番号、国番号などの詳細は含まれていません。 フィルタリングの仕方はわかりません。 – Ronald

+0

返信しているデータで質問を更新できますか? – terrorfall

答えて

1

最後に、配送方法を取得する方法を見つけました。ここで

は、フィードバックは歓迎です、私の解決策であるあなたが戻ってその配列を持っていたら...

function shipping() { 

    global $woocommerce; 

    $active_methods = array(); 
    $values = array ('country' => 'NL', 
        'amount' => 100); 


    // Fake product number to get a filled card.... 
    $woocommerce->cart->add_to_cart('1'); 

    WC()->shipping->calculate_shipping(get_shipping_packages($values)); 
    $shipping_methods = WC()->shipping->packages; 

    foreach ($shipping_methods[0]['rates'] as $id => $shipping_method) { 
     $active_methods[] = array( 'id'  => $shipping_method->method_id, 
            'type'  => $shipping_method->method_id, 
            'provider' => $shipping_method->method_id, 
            'name'  => $shipping_method->label, 
            'price'  => number_format($shipping_method->cost, 2, '.', '')); 
    } 
    return $active_methods; 
} 


function get_shipping_packages($value) { 

    // Packages array for storing 'carts' 
    $packages = array(); 
    $packages[0]['contents']    = WC()->cart->cart_contents; 
    $packages[0]['contents_cost']   = $value['amount']; 
    $packages[0]['applied_coupons']   = WC()->session->applied_coupon; 
    $packages[0]['destination']['country'] = $value['countries']; 
    $packages[0]['destination']['state'] = ''; 
    $packages[0]['destination']['postcode'] = ''; 
    $packages[0]['destination']['city']  = ''; 
    $packages[0]['destination']['address'] = ''; 
    $packages[0]['destination']['address_2']= ''; 


    return apply_filters('woocommerce_cart_shipping_packages', $packages); 
} 
関連する問題