• Resolved Torsten Landsiedel

    (@zodiac1978)


    Hi @kittmedia,

    es sieht so aus, als ob die Freischalten-Funktion und die Javascript-Version sich nicht so gut vertragen:

    Wenn ich “JavaScript-Erkennung für aktive Anbieter” aktiviert habe, dann wird der Klick auf die Checkbox gleich genutzt, um den Inhalt zu laden. Das ist schon irritierend, da ich mir nicht sicher bin, ob ich jetzt die Checkbox getroffen habe oder nicht. Nur der Blick in die Konsole zeigte dann, dass der Cookie wirklich gesetzt wird, wenn ich getroffen habe.

    Nun müsste nach meinem Verständnis in der Datenschutzerklärung beim Shortcode [embed_privacy_opt_out show_all="1"] auch bei Speaker Deck ein Häkchen erscheinen. Tut es aber nicht.

    Habe zum Test auch nochmal Twitter hinzugefügt. Auch hier das gleiche Spiel. Cookie-Inhalt wird angepasst und zeigt jetzt Speaker Deck und Twitter, aber keine Checkbox ausgefüllt beim Shortcode.

    Hast Du eine Idee, warum das nicht klappt?

    Beste Grüße
    Torsten

    The page I need help with: [log in to see the link]

Viewing 5 replies - 1 through 5 (of 5 total)
  • Plugin Author Matthias Kittsteiner

    (@kittmedia)

    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

    Thread Starter Torsten Landsiedel

    (@zodiac1978)

    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

    Plugin Author Matthias Kittsteiner

    (@kittmedia)

    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.

    Thread Starter Torsten Landsiedel

    (@zodiac1978)

    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

    Plugin Author Matthias Kittsteiner

    (@kittmedia)

    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

Viewing 5 replies - 1 through 5 (of 5 total)

The topic ‘Shortcode (opt_out) – Javascript version broken’ is closed to new replies.