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