قدم Woo 2.6 مناطق الشحن – وبهذا يمكننا اللعب باستخدام PHP (و JQuery) البسيطة لإنجاز الكثير من قواعد الشحن “المتقدمة” ، مثل الاستلام المحلي.
هذه المرة ، لقد اختبرت مقتطفًا لإضافة قائمة منسدلة إلى قسم الفوترة حيث يذهب المستخدمون لاختيار وجهة الاستلام. نتيجة لذلك ، يتم ملء عنوان الشحن تلقائيًا ، وكذلك طريقة الشحن. ماذا تعتقد؟
1. لاقط محلي متقدم – إعداد مناطق / طرق الشحن
أول شيء عليك القيام به هو إعداد مناطق الشحن WooCommerce. في هذه الحالة ، ستتوافق كل منطقة مع عنوان الاستلام المحلي (على سبيل المثال ، متجر رقم 1 ، متجر رقم 2 ، إلخ).
في المثال التالي ، أضفت “منطقتين / متاجر” في أستراليا ، الولاية = “إقليم العاصمة الأسترالية” ورمزين بريديين محددين.
كل منطقة لها طريقة شحن فريدة (التقاط محلي) بتكلفة = 0 دولار:
لاقط محلي متقدم – مناطق شحن WooCommerce
2. انتقاء محلي متقدم – مقتطف PHP / JQuery
الآن بعد أن تم إعداد المناطق بشكل صحيح ، هنا يأتي الجزء الصعب. فيما يلي مقتطف تم اختباره – ومع ذلك – يتطلب الكثير من التحسينات ، لذلك إذا اكتشفت أي شيء أو ترغب في المساهمة ، فاترك تعليقًا أدناه.
/**
* @snippet Advanced Local Pickup - WooCommerce
* @how-to Get CustomizeWoo.com FREE
* @source https://businessbloomer.com/?p=21534
* @author Rodolfo Melogli
* @compatible WC 3.4.2
*/
//////////////////////////////////////////////////////////
// 1. New select field @ billing section
add_filter( 'woocommerce_checkout_fields' , 'bbloomer_display_pickup_locations' );
function bbloomer_display_pickup_locations( $fields ) {
$fields['billing']['pick_up_locations'] = array(
'type' => 'select',
'options' => array(
'option_1' => 'Select...',
'option_2' => 'Melbourne Road Shop',
'option_3' => 'Perth Road Shop'),
'label' => __('Pick Up Location', 'woocommerce'),
'class' => array('form-row-wide'),
'clear' => true
);
return $fields;
}
//////////////////////////////////////////////////////////
// 2. Field to show only when country == Australia
add_action( 'woocommerce_after_checkout_form', 'bbloomer_conditionally_hide_show_pickup', 5);
function bbloomer_conditionally_hide_show_pickup() {
?>
<script type="text/javascript">
jQuery('select#billing_country').live('change', function(){
var country = jQuery('select#billing_country').val();
var check_country = new Array(<?php echo '"AU"'; ?>);
if (country && jQuery.inArray( country, check_country ) >= 0) {
jQuery('#pick_up_locations_field').fadeIn();
} else {
jQuery('#pick_up_locations_field').fadeOut();
jQuery('#pick_up_locations_field input').val('');
}
});
</script>
<?php
}
//////////////////////////////////////////////////////////
// 3. "Ship to a different address" opened by default
add_filter( 'woocommerce_ship_to_different_address_checked', '__return_true' );
//////////////////////////////////////////////////////////
// 4. Change shipping address when local pickup location changes
add_action( 'woocommerce_after_checkout_form', 'bbloomer_checkout_update_pickup_address', 10);
function bbloomer_checkout_update_pickup_address() {
?>
<script type="text/javascript">
jQuery('select#pick_up_locations').live('change', function(){
var location = jQuery('select#pick_up_locations').val();
if (location == 'option_2') {
jQuery('select#shipping_country').val('AU').change();
jQuery('select#shipping_state').val('ACT').change();
jQuery('#shipping_city_field input').val('Sidney');
jQuery('#shipping_address_1_field input').val('Melbourne Road');
jQuery('#shipping_postcode_field input').val('34500');
jQuery(".shipping_address input[id^='shipping_']").prop("disabled", true);
jQuery(".shipping_address select[id^='shipping_']").prop("disabled", true);
} else if (location == 'option_3') {
jQuery('select#shipping_country').val('AU').change();
jQuery('select#shipping_state').val('ACT').change();
jQuery('#shipping_city_field input').val('Sidney');
jQuery('#shipping_address_1_field input').val('Perth Road');
jQuery('#shipping_postcode_field input').val('79200');
jQuery(".shipping_address input[id^='shipping_']").prop("disabled", true);
jQuery(".shipping_address select[id^='shipping_']").prop("disabled", true);
} else {
jQuery(".shipping_address input[id^='shipping_']").prop("disabled", false);
jQuery(".shipping_address select[id^='shipping_']").prop("disabled", false);
}
});
</script>
<?php
}
نتيجة لذلك ، بمجرد تحديد عنوان الاستلام المحلي الصحيح من قسم الفواتير ، يجب أن تحصل تلقائيًا على طريقة الشحن الصحيحة في الخروج:
لاقط محلي متقدم – WooCommerce Checkout
هل اختبرت هذا؟ هل لديك أي شيء مفيد تضيفه؟ دعني اعرف!
المنشورات ذات الصلة:
WooCommerce: إخفاء أسعار الشحن في حالة توفر الشحن المجاني
WooCommerce: قصر الشحن على دولة واحدة فقط
WooCommerce: أضف إشعارات الشحن على صفحة الخروج
WooCommerce: إزالة ملصقات الشحن في السلة (مثل “السعر الثابت”)
WooCommerce: تم فتح “الشحن إلى عنوان مختلف” افتراضيًا
WooCommerce: قم بفرز تكاليف الشحن من الأقل إلى الأعلى
WooCommerce: عدم السماح بالشحن إلى عنوان صندوق البريد
WooCommerce: إخفاء سعر الشحن إذا كانت فئة الشحن @ سلة التسوق
WooCommerce: أضف حقل رقم المنزل @ Checkout
WooCommerce: أضف هاتف الشحن @ Checkout
أين تضيف هذا المقتطف؟
يمكنك وضع مقتطفات PHP في الجزء السفلي من ملف function.php القالب الفرعي الخاص بك (احذف “؟>” إذا كان لديك هناك). من ناحية أخرى ، ينتقل CSS في ملف style.css الخاص بسمة الطفل. تأكد من أنك تعرف ما تفعله عند تحرير مثل هذه الملفات – إذا كنت بحاجة إلى مزيد من الإرشادات ، فيرجى إلقاء نظرة على الفيديو التعليمي المجاني الخاص بي “أين تضع تخصيص WooCommerce؟”
هل هذا المقتطف (لا يزال) يعمل؟
يرجى إعلامي في التعليقات إذا كان كل شيء يعمل كما هو متوقع. يسعدني مراجعة المقتطف إذا أبلغت بخلاف ذلك (يرجى تقديم لقطات شاشة). لقد اختبرت هذا الكود مع موضوع Storefront وإصدار WooCommerce المذكور أعلاه واستضافة صديقة لـ وورد بريس على PHP 7.3.
إذا كنت تعتقد أن هذا الرمز وفر لك الوقت والمال ، فلا تتردد في الانضمام إلى أكثر من 14000 مشترك في WooCommerce Weekly للحصول على تحديثات منشورات المدونة أو أكثر من 250 من مؤيدي Business Bloomer لمدة 365 يومًا من مزايا WooCommerce . شكرا لكم مقدما 🙂
هل تحتاج إلى مساعدة في WooCommerce؟
تحقق من دروس الفيديو المجانية هذه. يمكنك تعلم كيفية تخصيص WooCommerce بدون مكونات إضافية غير ضرورية ، وكيفية تكوين إعدادات البرنامج المساعد WooCommerce بشكل صحيح وحتى كيفية إتقان استكشاف أخطاء WooCommerce في حالة حدوث خطأ!