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

Dodawanie kilku produktów jednocześnie do koszyka

Grzegorz Chodacki21 sierpnia 2018woocommerceadd 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/

Ukrywanie zakładek na stronie produktu

Często spotykam się z tym, że na stronie produktu zakładki z dodatkowymi informacjami i komentarzami są niepotrzebne. Pokażę jak możemy je ukryć w prosty sposób.

woocommerce product gutenberg

woocommerce/

Guttenberg w opisie produktu Woocommerce

Taka naszła nas dzisiaj idea aby nieco uatrakcyjnić wygląd opisu produktu na sklepie woocommerce wprowadzając choćby podział na 2 kolumny. Po lewej stronie opis a po prawej skład produktu, zalecenia stosowania, najważniejsze cechy. Pierwsza myśl to oczywiście modyfikacja i nadpisanie templatki woocommerce. Potem już poleciałem z budowaniem nowych zakładek do produktu i dodawaniem custom fields. […]

dla admina, woocommerce/

Załącznik do maila z potwierdzeniem zamówienia w Woocommerce

Taka szybka sytuacja. Kolega ze Słowacji bardzo skrupulatnie dopracowuje sklep i wpada na różne ciekawe pomysł. Jednym z nich jest umieszczenie w mailu potwierdzającym zamówienie załącznika w pdf z regulaminem sklepu. Można zainstalować oczywiście wtyczkę Email Attachments od Woocommerce. Ale wtyczki są dla cieniasów. Napiszemy kod.

Najnowsze wpisy

  • Obsługa plików WebP w WordPress
  • Ustawienia bezpośrednich odnośników
  • Ukrywanie zakładek na stronie produktu
  • Guttenberg w opisie produktu Woocommerce
  • Załącznik do maila z potwierdzeniem zamówienia w Woocommerce

Najnowsze komentarze

    Archiwa

    • 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