Prüfen Sie mit WC()->session->has_session() nur am Frontend, aber nicht an der Rest-API

Lesezeit: 1 Minute

Benutzer-Avatar
Raffael

Da ich mit meinem Plugin Artikel zum Woocommerce-Warenkorb hinzufügen möchte, muss ich sicherstellen, dass das Sitzungscookie gesetzt ist, und das Cookie setzen, wenn es noch nicht gesetzt ist.

Dieser Code funktioniert für das Frontend einwandfrei:

add_action('woocommerce_init', 'force_non_logged_user_wc_session');

function force_non_logged_user_wc_session()
{

if (is_user_logged_in() || is_admin())
    return;

    if (!WC()->session->has_session()) {
    WC()->session->set_customer_session_cookie(true);
    }

}

Leider funktionieren alle meine REST-API-Callbacks nicht mehr für Gäste (die REST-API wird von Javascript aufgerufen und benötigt keine WC-Sessions), geben aber folgende Meldung zurück:

Fataler Fehler: Nicht erfasster Fehler: Aufruf einer Member-Funktion has_session() auf null in C:\Users….\wp-content\plugins……..php:318

Der Grund für das Problem liegt höchstwahrscheinlich darin, dass WC den Session-Handler nur auf Frontend-Seiten lädt. Für meine Nachfrage reicht das aus, aber ich weiß nicht, wie ich den Cookie nur am Frontend setzen soll. Ich kann das Cookie nur im Header setzen, aber woher weiß ich dann schon, ob das eine Anfrage vom Frontend oder der REST API ist?

Ich habe versucht, die Überprüfung mit den folgenden Überprüfungen zu behandeln:
if(did_action( 'wp_loaded' ))
und ich habe versucht, die Aktion zu anderen Aktionshaken hinzuzufügen:
wp_loaded und init

Ich habe das Problem gerade mit dem folgenden Fix gelöst: Ich überprüfe nur, ob die Objektsitzung in WC() existiert

function force_non_logged_user_wc_session()
{
    if (is_user_logged_in() || is_admin())
        return;
    if (isset(WC()->session)) {
        if (!WC()->session->has_session()) {
            WC()->session->set_customer_session_cookie(true);
       }
    }
}

Dies scheint ohne Probleme zu funktionieren

1136650cookie-checkPrüfen Sie mit WC()->session->has_session() nur am Frontend, aber nicht an der Rest-API

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy