WordPress

woocommerce offtopic — Problem z wysyłką poszczególnych przedmiotów i klasami

  • 8 czerwca, 2024
  • 4 min read
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ę.

Warto przeczytać!  Jak wyświetlić listę wszystkich zarejestrowanych bloków

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 );

Warto przeczytać!  WP dodaje -2 na końcu mojego slug. Gdzie są przechowywane oryginały, abym mógł je usunąć?

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)


Źródło