Snippet

Wyświetlanie kosztów wysyłki w koszyku WooCommerce bez przeładowania strony

Jak pokazać koszty wysyłki w koszyku bez przeładowania stronyWyświetlanie kosztów wysyłki w WooCommerce bez odświeżaniaPokazywanie opłat za wysyłkę w koszyku bez adresuKoszty wysyłki w WooCommerce za pomocą AJAXWyświetlanie kosztów wysyłki w koszyku bez wypełniania adresuObliczanie kosztów wysyłki w WooCommerce bez przeładowania stronyJak pokazać koszty wysyłki w WooCommerce bez odświeżaniaWyświetlanie kosztów wysyłki bez podawania adresu w WooCommerceKoszty wysyłki na stronie koszyka WooCommerce bez przeładowaniaDynamiczne koszty wysyłki w WooCommerce koszyku

Objaśnienie

Aby wyświetlić koszt wysyłki w koszyku WooCommerce bez konieczności przeładowania strony, to rozwiązanie wykorzystuje odrobinę magii zwanej AJAX. Oto jak to działa:

  • Skrypt niestandardowy: Na stronie koszyka dodawany jest specjalny skrypt. Ten skrypt komunikuje się z Twoim serwerem bez odświeżania strony, prosząc go o obliczenie kosztu wysyłki.
  • Obsługa AJAX: Gdy skrypt prosi o koszt wysyłki, serwer sprawdza, czy wysyłka jest potrzebna. Jeśli tak, oblicza koszt i odsyła go z powrotem do skryptu.
  • Wyświetlanie kosztu: Gdy skrypt otrzyma koszt, aktualizuje stronę koszyka, aby pokazać nowy koszt wysyłki w określonym miejscu, oznaczonym elementem .shipping-cost.
  • Automatyczne aktualizacje: Skrypt uruchamia się, gdy strona koszyka jest ładowana, i może być również wywoływany przez inne działania, takie jak zmiana ilości przedmiotów w koszyku.

Upewnij się, że Twoja strona koszyka ma element z klasą .shipping-cost, w którym pojawi się koszt wysyłki. Jeśli Twój motyw używa innej konfiguracji, być może będziesz musiał nieco dostosować kod, aby pasował.

Kod

1```php 2// Enqueue custom script for AJAX shipping cost update 3function wp_dudecom_enqueue_ajax_shipping_script() { 4 if (is_cart()) { 5 wp_enqueue_script('wp-dudecom-ajax-shipping', get_template_directory_uri() . '/js/wp-dudecom-ajax-shipping.js', array('jquery'), null, true); 6 wp_localize_script('wp-dudecom-ajax-shipping', 'wp_dudecom_ajax_shipping_params', array( 7 'ajax_url' => admin_url('admin-ajax.php'), 8 'nonce' => wp_create_nonce('wp_dudecom_ajax_shipping_nonce') 9 )); 10 } 11} 12add_action('wp_enqueue_scripts', 'wp_dudecom_enqueue_ajax_shipping_script'); 13 14// AJAX handler to calculate shipping cost 15function wp_dudecom_calculate_shipping_cost() { 16 check_ajax_referer('wp_dudecom_ajax_shipping_nonce', 'security'); 17 18 if (WC()->cart->needs_shipping()) { 19 WC()->cart->calculate_shipping(); 20 WC()->cart->calculate_totals(); 21 22 $packages = WC()->shipping->get_packages(); 23 $shipping_cost = ''; 24 25 foreach ($packages as $package) { 26 if (!empty($package['rates'])) { 27 foreach ($package['rates'] as $rate) { 28 $shipping_cost = wc_price($rate->cost); 29 break; 30 } 31 } 32 } 33 34 wp_send_json_success(array('shipping_cost' => $shipping_cost)); 35 } else { 36 wp_send_json_error('No shipping needed'); 37 } 38} 39add_action('wp_ajax_wp_dudecom_calculate_shipping_cost', 'wp_dudecom_calculate_shipping_cost'); 40add_action('wp_ajax_nopriv_wp_dudecom_calculate_shipping_cost', 'wp_dudecom_calculate_shipping_cost'); 41 42// Add custom script to handle AJAX request 43add_action('wp_footer', 'wp_dudecom_add_ajax_shipping_script'); 44function wp_dudecom_add_ajax_shipping_script() { 45 if (is_cart()) { 46 ?> 47 <script type="text/javascript"> 48 jQuery(document).ready(function($) { 49 function updateShippingCost() { 50 $.ajax({ 51 url: wp_dudecom_ajax_shipping_params.ajax_url, 52 type: 'POST', 53 dataType: 'json', 54 data: { 55 action: 'wp_dudecom_calculate_shipping_cost', 56 security: wp_dudecom_ajax_shipping_params.nonce 57 }, 58 success: function(response) { 59 if (response.success) { 60 $('.shipping-cost').text(response.data.shipping_cost); 61 } else { 62 console.log(response.data); 63 } 64 } 65 }); 66 } 67 68 // Trigger shipping cost update on cart page load 69 updateShippingCost(); 70 71 // Optionally, trigger on other events like quantity change 72 $(document.body).on('updated_cart_totals', function() { 73 updateShippingCost(); 74 }); 75 }); 76 </script> 77 <?php 78 } 79} 80``` 81 82Note: This code assumes you have a `.shipping-cost` element in your cart template where the shipping cost will be displayed. Adjust the selector as needed to match your theme's HTML structure.

Instrukcja

Aby wdrożyć funkcję wyświetlania kosztu wysyłki w koszyku bez przeładowania strony, wykonaj następujące kroki:

Lokalizacja pliku: Dodaj poniższy kod do pliku functions.php swojego motywu lub do pliku własnej wtyczki.

Wymagania wstępne: Upewnij się, że WooCommerce jest zainstalowane i aktywowane na Twojej stronie WordPress.

Kroki wdrożenia:

  1. Załaduj niestandardowy skrypt:
    • Upewnij się, że fragment kodu do załadowania niestandardowego skryptu AJAX został dodany do pliku functions.php.
    • Ten skrypt będzie ładowany tylko na stronie koszyka.
  2. Ustawienie obsługi AJAX:
    • Upewnij się, że funkcja obsługi AJAX jest zawarta w pliku functions.php.
    • Funkcja ta oblicza koszt wysyłki i zwraca go za pomocą AJAX.
  3. JavaScript do żądania AJAX:
    • Upewnij się, że kod JavaScript został dodany do stopki strony koszyka za pomocą akcji wp_footer.
    • Ten skrypt wysyła żądanie AJAX w celu obliczenia i zaktualizowania kosztu wysyłki.
  4. Element HTML do wyświetlania:
    • Upewnij się, że szablon strony koszyka zawiera element z klasą .shipping-cost, w którym będzie wyświetlany koszt wysyłki.
    • Jeśli Twój motyw używa innej struktury, dostosuj odpowiednio selektor JavaScript.

Po wdrożeniu koszt wysyłki będzie aktualizowany dynamicznie na stronie koszyka bez potrzeby przeładowania strony. Jeśli napotkasz jakiekolwiek problemy lub potrzebujesz dalszej personalizacji, rozważ skontaktowanie się z wp-dude.com w celu uzyskania fachowej pomocy.

\n admin_url('admin-ajax.php'),\n 'nonce' => wp_create_nonce('wp_dudecom_ajax_shipping_nonce')\n ));\n }\n}\nadd_action('wp_enqueue_scripts', 'wp_dudecom_enqueue_ajax_shipping_script');\n\n// AJAX handler to calculate shipping cost\nfunction wp_dudecom_calculate_shipping_cost() {\n check_ajax_referer('wp_dudecom_ajax_shipping_nonce', 'security');\n\n if (WC()->cart->needs_shipping()) {\n WC()->cart->calculate_shipping();\n WC()->cart->calculate_totals();\n\n $packages = WC()->shipping->get_packages();\n $shipping_cost = '';\n\n foreach ($packages as $package) {\n if (!empty($package['rates'])) {\n foreach ($package['rates'] as $rate) {\n $shipping_cost = wc_price($rate->cost);\n break;\n }\n }\n }\n\n wp_send_json_success(array('shipping_cost' => $shipping_cost));\n } else {\n wp_send_json_error('No shipping needed');\n }\n}\nadd_action('wp_ajax_wp_dudecom_calculate_shipping_cost', 'wp_dudecom_calculate_shipping_cost');\nadd_action('wp_ajax_nopriv_wp_dudecom_calculate_shipping_cost', 'wp_dudecom_calculate_shipping_cost');\n\n// Add custom script to handle AJAX request\nadd_action('wp_footer', 'wp_dudecom_add_ajax_shipping_script');\nfunction wp_dudecom_add_ajax_shipping_script() {\n if (is_cart()) {\n ?>\n \n