Hallo Torsten,
ich verstehe das Problem, kann es aber leider lokal nicht aktualisieren. Dem Quellcode nach wird der Cookie nicht korrekt ausgelesen. Dieser wird über wp_localize_script an das JavaScript übergeben, ist bei dir aber nur ein leeres Array statt der Embeds aus dem Cookie.
Die Funktion dafür findest du hier:
https://github.com/epiphyt/embed-privacy/blob/main/inc/class-embed-privacy.php#L313-L325
An sich nichts großes, daher kann ich ohne genaues Debugging nicht erkennen, warum das bei dir nicht funktioniert. Vielleicht kannst du bei dir mal schauen, was $_COOKIE['embed-privacy'] bei dir zurückgibt und ebenso jeweils die Zwischenschritte von wp_unslash( $_COOKIE['embed-privacy'] ), sanitize_text_field( wp_unslash( $_COOKIE['embed-privacy'] ) ) und json_decode( sanitize_text_field( wp_unslash( $_COOKIE['embed-privacy'] ) ) ).
Viele Grüße
Matze
Hallo Matze,
habe den Fehler gefunden. Hier ist die Funktion im Original:
/**
* Get the Embed Privacy cookie.
*
* @return mixed The content of the cookie
*/
private function get_cookie() {
if ( empty( $_COOKIE['embed-privacy'] ) ) {
return '';
}
if ( ! empty( $this->cookie ) ) {
return $this->cookie;
}
$this->cookie = json_decode( sanitize_text_field( wp_unslash( $_COOKIE['embed-privacy'] ) ) );
return $this->cookie;
}
Wenn kein Cookie gefunden wird, steigen wir aus, klar. Aber dann kommt ein Check, ob this->cookie nicht leer ist und wenn ja, gib das zurück. Die private Variable ist aber noch leer und gibt dann eben leer (NULL) zurück.
Die Lösung ist, die Variable zu füllen und dann zu checken, ob etwas drin gefunden wird. Dann wird die Liste auch korrekt angezeigt:
/**
* Get the Embed Privacy cookie.
*
* @return mixed The content of the cookie
*/
private function get_cookie() {
if ( empty( $_COOKIE['embed-privacy'] ) ) {
return '';
}
$this->cookie = json_decode( sanitize_text_field( wp_unslash( $_COOKIE['embed-privacy'] ) ) );
if ( ! empty( $this->cookie ) ) {
return $this->cookie;
}
return $this->cookie;
}
Anscheinend ist das Problem nach dem ersten Benutzen nicht mehr leicht erkennbar, weil die Variable dann ja gefüllt ist und zumindest nicht mehr leer zurückgibt.
Beste Grüße
Torsten
Das ergibt aber nicht wirklich Sinn, dass eine leere Variable zurückgegeben wird, wenn die Prüfung auf nicht leer steht. Also dürfte die If-Anweisung nicht wahr sein.
Kannst du bei dir innerhalb der If-Anweisung schauen, was genau $this->cookie beinhaltet? Das dürfte dann ja nicht leer sein.
Ich verstehe es nicht und werde bald wahnsinnig …
Ich bekomme trotz anderer DevTools-Anzeige fogendes hin:

Der Cookie ist vorhanden, aber leer (siehe DevTools im Hintergrund) und der var_dump zeigt den Inhalt als speakerdeck: true.
Anders herum geht es auch. Laut DevTools ist der Cookie mit speakerdeck: true gesetzt, aber der var_dump zeigt nur NULL an.
Erst das Löschen des Cache löst das Problem, aber das kann ja nicht die Lösung sein. Die JS-Option soll ja gerade mit Caching funktionieren.
Um das Problem zu reproduzieren könntest du mal Cachify aktivieren. Vielleicht kannst es dann auch sehen und besser debuggen.
Beste Grüße und schon mal vielen Dank fürs Mitdenken und helfen!
Torsten
Ich denke, ich habe das Problem gefunden:
wp_localize_script wird durch Cachify auch gecachet, wodurch die Daten dort falsch sind, auf die sich das JavaScript verlässt.
Ich habe mir dafür einen Issue erstellt:
https://github.com/epiphyt/embed-privacy/issues/123