wPHP - wordpress, woocommerce - kodowanie bez wtyczek
WordPress - zakoduj to sam w PHP

Dodawanie kilku produktów jednocześnie do koszyka

Grzegorz Chodacki21 sierpnia 2018woocommerce add to cart, multiple

Woocommerce pozwala na wygenerowanie linka do strony kasy koszyka, który automatycznie dodaje produkt do koszyka. Działa to niestety tylko dla jednego produktu. Możemy utworzyć przykładowe łącze:

$product_id = 10;
$url = esc_url_raw( add_query_arg( 'add-to-cart', $product_id, wc_get_checkout_url() ) );

Niestety nie ma prostego sposobu by w ten sposób dodać kilka produktów.
Poniższy kod pozwoli za pomocą jednego linka dodać kilka identyfikatorów produktów oddzielonych przecinkami:

function woocommerce_maybe_add_multiple_products_to_cart( $url = false ) {
 // Make sure WC is installed, and add-to-cart qauery arg exists, and contains at least one comma.
 if ( ! class_exists( 'WC_Form_Handler' ) || empty( $_REQUEST['add-to-cart'] ) || false === strpos( $_REQUEST['add-to-cart'], ',' ) ) {
 return;
 }

 // Remove WooCommerce's hook, as it's useless (doesn't handle multiple products).
 remove_action( 'wp_loaded', array( 'WC_Form_Handler', 'add_to_cart_action' ), 20 );

 $product_ids = explode( ',', $_REQUEST['add-to-cart'] );
 $count = count( $product_ids );
 $number = 0;

 foreach ( $product_ids as $id_and_quantity ) {
 // Check for quantities defined in curie notation (<product_id>:<product_quantity>)
 
 $id_and_quantity = explode( ':', $id_and_quantity );
 $product_id = $id_and_quantity[0];

 $_REQUEST['quantity'] = ! empty( $id_and_quantity[1] ) ? absint( $id_and_quantity[1] ) : 1;

 if ( ++$number === $count ) {
 // Ok, final item, let's send it back to woocommerce's add_to_cart_action method for handling.
 $_REQUEST['add-to-cart'] = $product_id;

 return WC_Form_Handler::add_to_cart_action( $url );
 }

 $product_id = apply_filters( 'woocommerce_add_to_cart_product_id', absint( $product_id ) );
 $was_added_to_cart = false;
 $adding_to_cart = wc_get_product( $product_id );

 if ( ! $adding_to_cart ) {
 continue;
 }

 $add_to_cart_handler = apply_filters( 'woocommerce_add_to_cart_handler', $adding_to_cart->get_type(), $adding_to_cart );

 // Variable product handling
 if ( 'variable' === $add_to_cart_handler ) {
 woo_hack_invoke_private_method( 'WC_Form_Handler', 'add_to_cart_handler_variable', $product_id );

 // Grouped Products
 } elseif ( 'grouped' === $add_to_cart_handler ) {
 woo_hack_invoke_private_method( 'WC_Form_Handler', 'add_to_cart_handler_grouped', $product_id );

 // Custom Handler
 } elseif ( has_action( 'woocommerce_add_to_cart_handler_' . $add_to_cart_handler ) ){
 do_action( 'woocommerce_add_to_cart_handler_' . $add_to_cart_handler, $url );

 // Simple Products
 } else {
 woo_hack_invoke_private_method( 'WC_Form_Handler', 'add_to_cart_handler_simple', $product_id );
 }
 }
}

// Fire before the WC_Form_Handler::add_to_cart_action callback.
add_action( 'wp_loaded', 'woocommerce_maybe_add_multiple_products_to_cart', 15 );

function woo_hack_invoke_private_method( $class_name, $methodName ) {
 if ( version_compare( phpversion(), '5.3', '<' ) ) { throw new Exception( 'PHP version does not support ReflectionClass::setAccessible()', __LINE__ ); } $args = func_get_args(); unset( $args[0], $args[1] ); $reflection = new ReflectionClass( $class_name ); $method = $reflection->getMethod( $methodName );
 $method->setAccessible( true );

 $args = array_merge( array( $class_name ), $args );
 return call_user_func_array( array( $method, 'invoke' ), $args );
}

Kilka produktów z ilościami:

$product_ids = '63833:2,221916:4';
$add_to_cart_url = esc_url_raw( add_query_arg( 'add-to-cart', $product_ids, wc_get_checkout_url() ) );

Dwa produkty po jednej sztuce

$product_ids = '63833,221916';
$add_to_cart_url = esc_url_raw( add_query_arg( 'add-to-cart', $product_ids, wc_get_checkout_url() ) );

Normalnie jeden produkt

$product_ids = '63833';
$add_to_cart_url = esc_url_raw( add_query_arg( 'add-to-cart', $product_ids, wc_get_checkout_url() ) );
Sortowanie produktów na zapleczu po stanie magazynowym Funkcja mail() w wordpress na serwerach home.pl

Related Posts

woocommerce

Jak wyłączyć wymagane pola na stronie zamówienia woocommerce

Czasami zachodzi potrzeba wyłączenia, niektórych wymaganych pól na stronie zamówienia. Np. mamy tego typu wysyłkę, że klient nie chce podawać imienia i nazwiska. Albo chce dyskretnie na numer paczkomatu, bez podawania adresu domowego. Oczywiście możemy zrobić to za pomocą wtyczki Checkout Field Editor, ale jest ona komercyjna i bez corocznych aktualizacji potrafi popsuć zaplecze. Dlatego […]

layout, woocommerce

Wyszukiwanie postów tylko po tytułach

Temat wydawał się dość prosty, a jednak zajął mi trochę czasu. Wujek Google wcale nie jest tak łaskawy w odpowiedzi na pytanie co zrobić aby wyniki wyszukiwania w wordpress obejmowały jedynie szukanie po tytułach postów (produktów) a nie po całej treści (opisie).

optymalizacja, woocommerce

Jak przyspieszyć stronę wyłączając odświeżanie koszyka woocoomerce

Bardzo często zdarza się, że nasza strona z woocommerce działa wolno. Narzędzia do testowania prędkości typu GTMetrix, często pokazują, że wpływ na prędkość ładowania strony może mieć skrypt wc-ajax=get_refreshed_fragments. Generuje on opóźnienia i obciążenie serwera. Do czego jest on potrzebny, czy jest potrzebny i jak go wyłączyć?

Ostatnie wpisy

  • Automatyczne aktualizacje wordpressa
  • Jak wyłączyć wymagane pola na stronie zamówienia woocommerce
  • Jak wstawić kod HTML lub shortcode w opisach kategorii produktów
  • Jak wyłączyć odzyskiwanie hasła
  • Pobieranie aktualnego kursu walut przez API NBP

Najnowsze komentarze

    Archiwa

    • kwiecień 2023
    • wrzesień 2022
    • lipiec 2022
    • kwiecień 2022
    • marzec 2022
    • październik 2021
    • wrzesień 2021
    • kwiecień 2021
    • marzec 2021
    • grudzień 2020
    • lipiec 2020
    • marzec 2020
    • luty 2020
    • styczeń 2020
    • maj 2019
    • luty 2019
    • listopad 2018
    • sierpień 2018
    • czerwiec 2018
    • maj 2018
    • marzec 2018
    • luty 2018
    • styczeń 2018

    Kategorie

    • dla admina
    • layout
    • optymalizacja
    • woocommerce

    Meta

    • Zaloguj się
    • Kanał wpisów
    • Kanał komentarzy
    • WordPress.org
    Strony na Wordpress - uKONTENTowani.pl
    TO NIE JEST STRONA DLA INSTALATORÓW WTYCZEK