KOMPLEKSOWE ROZWIĄZANIE – Naprawa linków ?add-to-cart=ID w WooCommerce
===================================================================
Problem:
Link w formacie /?add-to-cart=ID (np. /checkout/?add-to-cart=764) nie dodaje produktu do koszyka – koszyk pozostaje pusty.
Dotyczy wszystkich prostych produktów.
Cel: link ma dodać produkt do koszyka i od razu przekierować użytkownika bezpośrednio na stronę checkout.
ROZWIĄZANIE (działa w 2026)
Krok 1: Ustawienia WooCommerce (OBOWIĄZKOWE)
Przejdź do:
WooCommerce → Ustawienia → Produkty → Ogólne
- Odznacz opcję: „Włącz przyciski dodawania do koszyka AJAX na stronach archiwalnych”
- Odznacz opcję: „Przekieruj do koszyka po pomyślnym dodaniu”
- Zapisz zmiany
Krok 2: Kod do functions.php (lub wtyczka Code Snippets / WPCode)
Dodaj dokładnie ten kod:
// =============================================
// Naprawa linków ?add-to-cart=ID + przekierowanie na checkout
// =============================================
add_action( 'template_redirect', 'fix_add_to_cart_query_string_and_redirect', 5 ); // priorytet 5 – wcześniej niż core
function fix_add_to_cart_query_string_and_redirect() {
if ( ! isset( $_GET['add-to-cart'] ) || ! is_numeric( $_GET['add-to-cart'] ) ) {
return;
}
// Zapobiegamy podwójnemu przetwarzaniu przez WooCommerce
if ( defined( 'WC_DOING_AJAX' ) || did_action( 'woocommerce_add_to_cart' ) > 0 ) {
return;
}
$product_id = absint( $_GET['add-to-cart'] );
// Bezpieczne pobieranie ilości – domyślnie 1
$quantity = 1;
if ( isset( $_GET['quantity'] ) && is_numeric( $_GET['quantity'] ) && $_GET['quantity'] > 0 ) {
$quantity = absint( $_GET['quantity'] );
}
$product = wc_get_product( $product_id );
if ( ! $product || ! $product->is_purchasable() || ! $product->is_in_stock() || $product->is_type( 'variable' ) ) {
return;
}
// Dodajemy produkt
$added = WC()->cart->add_to_cart( $product_id, $quantity );
if ( $added ) {
wc_clear_notices();
// Przekierowanie bezpośrednio na checkout
wp_safe_redirect( wc_get_checkout_url() );
exit;
}
}
Krok 3: Dodatkowe zalecenia
1. Kod dodaj w motywie potomnym (child theme) lub przez wtyczkę Code Snippets.
2. Po dodaniu kodu wyczyść całą pamięć cache (strona, wtyczki, hosting, Cloudflare).
3. W WooCommerce → Status → Narzędzia uruchom:
- Wyczyść transienty
- Wyczyść sesje koszyka
4. Sprawdź, czy strony Koszyk i Checkout są poprawnie ustawione w WooCommerce → Ustawienia → Zaawansowane.
Testowanie:
Użyj linku: https://twoja-domena.pl/?add-to-cart=764
lub
https://twoja-domena.pl/?add-to-cart=764&quantity=2
Po kliknięciu produkt powinien zostać dodany i użytkownik ma być od razu na stronie checkout.
Jeśli nadal nie działa – wyłącz tymczasowo wszystkie wtyczki optymalizujące i cache, a następnie przetestuj ponownie.