2016-10-03 4 views
1

мне нужно добавить на отгрузку в кассе и у меня есть следующий код:WooCommerce отгрузку для международных клиентов

// adds order note at checkout page  
function notice_shipping() { 
echo '<p id="allow">Please allow 5-10 business days for delivery after order processing.</p>'; 
} 

add_action('woocommerce_before_order_notes', 'notice_shipping'); 

Я просто нужно знать, если есть способ ограничить это уведомление моих международных клиентов ? Я не против перечислить каждую страну, и Канада станет отличным началом.

Я видел $woocommerce->customer->get_shipping_country(), но не совсем уверен, как реализовать его в моих функциях.phpand также, какие коды использует Woocommerce для каждой страны?

Спасибо, что помогли мне!

ответ

2

Вот ваш код повторно с некоторыми JQuery внутри, потому что клиент не всегда регистрируются, и вы не знаете, во всех случаях, в какой стране будет выбран в качестве страны доставки.

Вот этот код:

function notice_shipping(){ 
    ?> 

    <script> 
     jQuery(document).ready(function($){ 

      // Set the country code (That will NOT display the message) 
      var countryCode = 'FR'; 

      var adressType = 'billing'; 

      // Detecting If shipping Country is going to be used 
      $('#ship-to-different-address-checkbox').click(function(){ 

       if($('.shipping_address').css('display') == 'none'){ 
        adressType = 'billing'; 
       } else { 
        adressType = 'shipping'; 
       } 
       // console.log($adressType); 
      }); 

      // Showing or hidding the message 
      $('select#billing_country, select#shipping_country').change(function(){ 

       if(adressType == 'billing') { 
        selectedCountry = $('select#billing_country').val(); 
       } 
       else if(adressType == 'shipping') { 
        selectedCountry = $('select#shipping_country').val(); 
       } 

       if(selectedCountry == countryCode){ 
        $('.shipping-notice').hide(); 
        // console.log('hide'); 
       } 
       else { 
        $('.shipping-notice').show(); 
        // console.log('show'); 
       } 
       // console.log(selectedCountry); 
      }); 
     }); 
    </script> 

    <?php 

    echo '<p id="allow" class="shipping-notice" style="display:none">Please allow 5-10 business days for delivery after order processing.</p>'; 
} 
add_action('woocommerce_before_order_notes', 'notice_shipping'); 

Этот код идет в function.php файле Вашего активного ребенка темы (или темы), или же в любом файле плагина.

Этот код протестирован и полностью работоспособен.

Вы можете see here a raw demo(временный). Здесь выбрана страна, которая не будет отображать сообщение при оформлении заказа, это Франция.

+0

Ницца! Я думал, что JS может быть лучшим решением, но у него не было времени, чтобы его реализовать. – helgatheviking

+0

@helgatheviking Спасибо :) ... Я тоже немного занялся новым очень сложным новым проектом WooCommerce. Вот почему мой ответ приходит поздно. Ваш ответ потрясающий! – LoicTheAztec

+0

Wow thanks! именно то, что мне нужно! – Xenocide122

2

Я не думаю, что вы гарантированно узнаете адрес клиента по адресу woocommerce_before_order_notes. Вы можете попробовать следующее, но я не уверен, что он будет работать до тех пор, пока клиент не отправит свой платежный адрес.

// adds order note at checkout page  
function notice_shipping($checkout) { 
    $country = WC()->customer->get_shipping_country(); 
    if($country != 'US'){ 
     echo '<p id="allow">Please allow 5-10 business days for delivery after order processing.</p>'; 
    } 
} 

add_action('woocommerce_before_order_notes', 'notice_shipping'); 
+0

О да, очень верно. Мне нужно искать лучшее место, чтобы показать это. Какие-либо предложения? Мне придется искать крючки и думать об этом утром. Я не смогу пройти тест до утра, так как я далеко от своего компа. Благодаря! – Xenocide122

Смежные вопросы