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.