Ich habe ein funktionierendes Stück Javascript, das ein Objektliteral enthält. Aber ich muss es lokalisieren und versuche herauszufinden, wie ich es umschreiben kann, damit ich wp_localize_script () bekomme, um es zu aktivieren und das richtige Format auszugeben.
Die nicht lokalisierte (nicht dynamische) Version sieht folgendermaßen aus:
var layoyt_config = {
'header' : 1
, 'footer' : 1
, 'ls' : {'sb1':1}
, 'rs' : {'sb1':1,'sb2':1}
, 'align' : 'center'
};
Um diese Werte von PHP generieren zu lassen (basierend auf einigen wp_settings), möchte ich wp_localize_script verwenden, damit ich sie von dort übernehmen kann:
var layoyt_config = my_localized_data.layoyt_config;
Und um diese Daten in diese Objekteigenschaft zu bekommen, dachte ich, dass ich das tun könnte, aber offensichtlich nicht:
$data = array(
'layout_config' => {
'header' : 1
, 'footer' : 1
, 'ls' : {'sb1': 1}
, 'rs' : {'sb1': 1,'sb2': 1}
, 'align' : 'center'
}
);
wp_localize_script('my-script-handle', 'my_localized_data', $data);
Da dies zu PHP-Analysefehlern führt, habe ich versucht, die Syntax von json in array umzuschreiben, da wp_localize_script diese zurück in die Objektnotation konvertiert, aber das funktioniert auch bei mir nicht:
$data = array(
'layout_config' => array(
'header' => 1
, 'footer' => 1
, 'ls' => array('sb1'=>1)
, 'rs' => array('sb1'=>1,'sb2'=>1)
, 'align' => 'center'
)
);
wp_localize_script('my-script-handle', 'my_localized_data', $data);
Und während dies reibungslos über den PHP-Parser läuft, erhalte ich in meiner Seitenquelle nicht die erwartete Ausgabe, da my_localized_data.layout_config zu einem String "Array" wird. Hier ist die Ausgabe:
<script type='text/javascript'>
/* <![CDATA[ */
var wpkit_localized_data = {
layout_config: "Array"
};
/* ]]> */
</script>
Also .. Wie kann ich das machen (oder muss ich einfach akzeptieren, dass ich mein Objekt in diskrete Vars 'platt machen' muss wie:
lc_header = '1';
ls_ls_sb1 = '1';
etc...
quelle
Haftungsausschluss - Ich bin in Bezug auf JS-Sicherheitsfragen hier nicht ganz auf dem neuesten Stand.
Um der gewünschten Ausgabe zu entsprechen, müssen Sie zunächst die Verschachtelungsebene festlegen. Der Objektname wird als Parameter im Aufruf von localize (anstelle des Array-Schlüssels) verwendet:
Aber
ls
undrs
sind immer noch kaputt, weil dieWP_Scripts->print_scripts_l10n()
Methode den Fall nicht behandelt, wenn die Variable ein Array ist.Das Beste, was mir einfiel, war, den folgenden Filter zu reparieren (wie oben - ich bin mir nicht sicher, wie sicher es wäre, ihn in der Produktion zu verwenden, aber um eine allgemeine Vorstellung zu geben):
quelle