woocommerce offtopic — Problem z wysyłką poszczególnych przedmiotów i klasami
Nie trzeba dodawać, że jestem w piekle Woo Shipping. Nie mogę tego zrozumieć. Próbuję ustawić metodę wysyłki w tabeli stawek dla klasy wysyłki, a następnie przypisać tę klasę wysyłki do produktu. Jeśli spojrzysz na zrzut ekranu, poczyniłem pewne postępy, ale mam kilka problemów.
Mam cztery metody wysyłki. Zwyczajny, szybki, zwyczajny, bezpłatna wysyłka i wrażliwy. Wszystkie produkty powinny domyślnie mieć opcję Zwykły z możliwością wyboru Szybkiej Zwykłej
W przypadku produktów wrażliwych nie powinna być dozwolona żadna inna metoda. W tym bezpłatna wysyłka.
W przypadku zwykłych produktów domyślnym (wybranym) powinien być Zwyczajny, a opcja wyboru Szybkiego Zwykłego powinna być dostępna.
W przypadku bezpłatnej wysyłki produkty wrażliwe nigdy nie kwalifikują się, ale produkty zwykłe są dostępne, gdy w koszyku znajdzie się 200 dolarów.
Podsumuję to więc:
Zwykłe produkty mają domyślną wysyłkę Zwykłą z opcją Szybkiej Zwykłej. Darmowa wysyłka w przypadku produktów zwykłych rozpoczyna się dopiero po osiągnięciu kwoty 200 dolarów. Wszystkie metody wysyłki powinny być dostępne (warunkowo) z wyjątkiem wysyłki wrażliwej.
Produkty wrażliwe mogą być dozwolone wyłącznie w przypadku przesyłek wrażliwych. Zwykła, szybka Zwykła i bezpłatna wysyłka nigdy nie powinna być brana pod uwagę.
Spójrz na zrzut ekranu, aby zobaczyć, gdzie jestem.
Uwaga: mam niestandardowy kod, który dzieli koszyk za pomocą tej funkcji:
’function set_default_shipping_method_for_shipping_class( $rates, $package ) { $shipping_class_slugs = array( 'cjpacket-ordinary’, 'cjpacket-szybki-zwykły’, 'ryczałtowa-wysyłka’ );
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$shipping_class = $cart_item['data']->get_shipping_class();
// Check if the shipping class of the current item matches any of the defined shipping class slugs
if ( in_array( $shipping_class, $shipping_class_slugs ) ) {
// Loop through available shipping rates to set the default method
foreach ( $rates as $rate_key => $rate ) {
// Change 'flat_rate:1' with your desired shipping method ID
if ( 'flat_rate:1' === $rate_key ) { // Change 'flat_rate:1' to match your desired method
// Make this method the default selected
$rates[$rate_key]->set_taxes( WC_Tax::calc_shipping_tax( $rates[$rate_key]->cost, WC_Tax::get_shipping_tax_rates() ) );
$rates[$rate_key]->set_shipping_total( $rates[$rate_key]->cost );
$rates[$rate_key]->set_method_id( $rates[$rate_key]->method_id );
$rates[$rate_key]->set_instance_id( $rates[$rate_key]->instance_id );
$rates[$rate_key]->set_label( $rates[$rate_key]->label );
$rates[$rate_key]->set_cost( $rates[$rate_key]->cost );
$rates[$rate_key]->set_id( $rates[$rate_key]->id );
$rates[$rate_key]->set_package_id( $rates[$rate_key]->package_id );
$rates[$rate_key]->set_meta_data( $rates[$rate_key]->meta_data );
$rates[$rate_key]->set_method_title( $rates[$rate_key]->method_title );
break; // Stop the loop after setting the default method
}
}
break; // Stop the loop after finding the specified shipping class
}
}
return $rates;
} add_filter( 'woocommerce_package_rates’, 'set_default_shipping_method_for_shipping_class’, 10, 2 );
add_filter( 'woocommerce_cart_shipping_packages’, 'bbloomer_split_shipping_packages_by_class’ );
funkcja bbloomer_split_shipping_packages_by_class( $pakiety ) {
$miejsce docelowe = $pakiety[0][’destination’];
$użytkownik = $pakiety[0][’user’]; $applied_coupons = $pakiety[0][’applied_coupons’]; $pakiety = tablica();
foreach ( WC()->koszyk->get_cart() as $cart_item_key => $cart_item ) {
$klucz = $element_koszyka[’data’]->get_shipping_class_id(); $pakiety[$key][’contents’][$cart_item_key] = $element_koszyka; }
foreach ( $pakiety jako $index => $pakiet ) { $total = array_sum( wp_list_pluck( $pakiety[$index][’contents’], 'łączna_linia’ ) ); $pakiety[$index][’destination’] = $miejsce docelowe; $pakiety[$index][’user’] = $użytkownik; $pakiety[$index][’applied_coupons’] = $applied_coupons; $pakiety[$index][’contents_cost’] = $całkowita; }
zwróć $pakiety;
}’
Wygląda na to, że moje klasy wysyłkowe są od początku całkowicie ignorowane i nie wiem, jak wypełnić pozostałe warunki, takie jak ukrywanie/pokazywanie/domyślne wybieranie różnych metod wysyłki w oparciu o klasy wysyłki przypisane do produktu.
Twoja pomoc jest bardzo ceniona. Sugestie dotyczące wtyczek w rozsądnej cenie (<100 USD) są mile widziane.
Dzięki
Strona, z którą potrzebuję pomocy: Zrzut ekranu koszyka
- Próbowałem kilku wtyczek
- Użyłem chatGPT do napisania niestandardowego kodu PHP
- Przeszukałem Internet w poszukiwaniu odpowiedzi.
- Poprosiłem o pomoc na forum pomocy technicznej Woocommerce (nadal czekam)