Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Ukrywanie metody wysyłki woocommerce
Abumbaraj
post 21.04.2021, 12:28:43
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 23.04.2018

Ostrzeżenie: (0%)
-----


  1. <?
  2.  
  3. add_filter('woocommerce_package_rates', 'product_hide_shipping_method', 10, 2);
  4. function product_hide_shipping_method( $rates, $package ){
  5. if ( is_admin() && ! defined( 'DOING_AJAX' ) )
  6. return $rates;
  7.  
  8. $shipping_method_id = 'flat_rate:3';
  9.  
  10. $product_ids = array(111,122,133);
  11.  
  12. $found = false;
  13.  
  14. foreach( $package['contents'] as $cart_item ) {
  15. if( in_array( $cart_item['data']->get_id(), $product_ids ) )
  16. $found = true;
  17. }
  18.  
  19. if( $found ){
  20. foreach ( $rates as $rate_key => $rate ){
  21. if( $shipping_method_id === $rate->id )
  22. unset($rates[$rate->id]);
  23. }
  24. }
  25. return $rates;



Korzystam z takiego skryptu który usuwa mi metodę wysyłki (flat_rate:3), jeśli określony przed ID produkt (np 111,122,133) jest w koszyku. Chciałbym go rozbudować tak, aby skrypt usuwał mi inną metodę wysyłki (np. flat_rate:10) gdy inny produkt będzie w koszyku. Czy ktoś mi pomoże?
Go to the top of the page
+Quote Post
trueblue
post 22.04.2021, 07:06:50
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Najprościej powtórzyć kod od linii 8 do 24 z inną wartością $shipping_method_id oraz $product_ids.

Trudniej:
1. Zrobić tabelę asocjacyjną: [metoda_wysylki=>[id_produktow]],
2. Iteracyjne przejść po tablicy 1, a wewnątrz pętli po koszyku (linie 14 i 15),
3. Jeśli produkt w koszyku znajduje się w tabeli produktów (wartość z pętli 1), to:
4. Wykonać pętlę 20-23 używając klucza z pętli 1.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 19:22