Optionen aus WordPress an JavaScripts übergeben #1

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.

Kommentare

  
  1. Rene sagt:

    Weil du gerade das Thema Daten aus der Datenbank holen ansprichst - WordPress kann komplexe Datenkonstrukte (arrays) serialized in der Datenbank ablegen.

    Ich tendiere immer mehr dazu, Arrays nicht mit serialized() in einen String zu konvertieren sondern hier das JSON-Format anzuwenden. Liegen Daten bereits im JSON-Format in der Datenbank, können Daten bei einem Ajax-Call viel schneller und direkter übergeben und von beiden Sprachen (PHP und Js) weiter verarbeitet werden.

    Beispiel:
    ---------

    add_action( 'wp_print_scripts', 'rr_print_scripts' );
    function rr_print_scripts() {
    $my_array = array( 'elm1', 'elm2', 'elm3' );
    $my_array = json_encode($my_array);
    ?>

    var my_json_object = ;

    <?php

    }

    Wollte nur mal darauf hinweisen.

  2. Rene sagt:

    Das stimmt, aber ich wollte nur verdeutlichen das die serialisierten Daten aus deiner DB scheinbar schon JSON sind. Das geht nicht klar hervor.

    • @Rene: nein, sind sie nicht, sie sind serialisiert. Du machst doch mit json_encode() ein JSON-Objekt daraus und dann kannst du wunderbar drauf zugreifen.

  3. Rene sagt:

    Siehst du, dann halte ich meinen Einwand doch für gerechtfertigt.
    Warum Arrays Serialisieren wenn ich sie doch gleich als Json-String ablegen kann?

  4. Alex sagt:

    Den Gedanken von Rene kann ich folgen. Ich hab letztens ein Plugin geschrieben und nach Tutorial die Daten als PHP-Array serialisiert in der Datenbank abgelegt und entsprechend geladen (, beim Laden jedoch häufig das unserialize() vergessen). Es scheint es mir logisch, den Schritt der Serialisierung zu umgehen, indem man die Daten gleich im JSON-Format abspeichert.
    Nichtsdestotrotz muss ich dann aber immernoch json_decode verwenden, oder? So richtig schlau werd ich nun nicht daraus, welche Variante besser ist...
    Allerdings muss ich dann trotzdem noch mit json_encode / json_decode arbeiten...

    • @Alex: du brauchst nicht un/serialisieren beim Ablegen von Daten, das macht WordPress im Standard; darum muss man sich als Entwickler nicht kümmern. update_option legt serialisiert ab, wenn ein Array kommt und ebenso kümmert sich get_option() darum, dass ein Array zurück kommt. Gleiches gilt für die Settings-API.

  5. Frank, ich schlage den Einsatz von htmlspecialchars() vor:

    var my_json_object = <?php echo htmlspecialchars (json_encode( $options ) ); ?>;

    vor.

    Damit entfällt das Risiko von XSS-Angriffen: Falls du in den Optionen auch Strings speicherst, die vom Benutzern eingegeben werden können, könnte der JSON-String auch HTML-Elemente enthalten.

    Die würden dann ungefiltert an den Browser des Blogadmins ausgegeben werden.

  6. Chris sagt:

    Ist die andere Lösung zufällig ein "Mißbrauch" von wp_localize_script? Ich las da neulich was in den Kommentaren bei WpTuts+

    • @Chris: ja, ist möglich wobei dies nicht unbedingt zu empfehlen ist; ich führe das dann kurz aus. Prinzipiell geht es, aber die Funktion hat Probleme mit mehrdimensionalen Arrays.

  7. Andi74 sagt:

    Aber inzwischen ist das doch garnicht mehr der Fall oder ich glaub die Funktion gibt es garnicht mehr ? Hat vielleicht jemand genauere Infos für mich ? Bin Dankbar für jede Antwort ;) Guter Beitrag

    Gruß Andi

© 2013, since 2005 bueltge.de [by:ltge.de] · Theme is built by ThemeShift