Wenn ein Plugin ein Skript verwendet (prominentes Beispiel: jQuery UI Datepicker), Sie jedoch nicht zufrieden sind, wie das Skript die Ausgabe rendert, gibt es zwei Möglichkeiten:
1. Heben Sie die Registrierung des Skripts auf.> Fügen Sie Ihre eigene Version hinzu
Also zuerst müssen Sie den Griff überprüfen, dann finden die Priorität und der Haken ( wp_enqueue_scripts
, login_enqueue_scripts
usw.) ... Sie die Bohrer wissen.
2. Ändern Sie die Parameter des jQuery-Plugins
Normalerweise - wenn das Plugin kein Mist ist - werden die Parameter von PHP nach JS mit übertragen
wp_localize_script( $handle, $object_name, array(
// data
) );
Dies ist eine clevere Möglichkeit, Ihre Daten zu einem JS-Skript hinzuzufügen, aber ... sie können standardmäßig nicht gefiltert werden. Weder WP_Scripts
noch WP_Dependencies
Angebote irgendwelche Filter können Benutzer später nutzen
Frage: Wie können wir die Argumente / Parameter filtern, die von PHP nach Javascript verschoben werden
wp_localize_script
?
wp_localize_script()
: einem ein- oder mehrdimensionalen Array .@toscho tolle Implementierung. Getestet und wahr. Hier ist eine leicht modifizierte Version, die auch das $ handle und $ object_name übergibt, sodass Sie nur bei Bedarf filtern können.
quelle
Die akzeptierte Antwort ist großartig! Ich bin jedoch auf ein Problem gestoßen, bei dem Advanced Custom Fields aufgrund eines Javascript-Fehlers im Backend nicht mehr funktioniert. Nachdem ich einige Stunden lang gegraben hatte, kam ich zu dem Schluss, dass dem Filterable_Scripts-Objekt die vom ACF-Plugin registrierten Javascript-Dateien fehlten. Ich weiß nicht genau, warum das so war, aber ich habe eine richtige Lösung dafür gefunden, wenn Sie auf dasselbe Problem stoßen.
Das
$GLOBALS['wp_scripts']
enthielt zum Glück noch die richtigen Skripte. Also habe ich folgendes gemacht inadd_action
:Da das Objekt ein Array aller registrierten Skripte enthält und die Handles auch die Array-Schlüssel sind, könnte ich array_diff_key verwenden, um festzustellen, welche Skripte im erweiterten Objekt fehlten, und sie erneut hinzufügen. Ich habe das getan und nicht nur
$fscripts->registered = $GLOBALS['wp_scripts']->registered;
weil ich keine vom erweiterten Objekt vorgenommenen Änderungen überschreiben wollte.
quelle
$acf_field_group = $GLOBALS['wp_scripts']->registered['acf-field-group'];
(auchacf-input
) zu speichern und sie dann erneut zur Instanz des erweitertenWP_Scripts
Tags hinzuzufügen :$GLOBALS['wp_scripts']->registered['acf-field-group'] = $acf_field_group
Dann wurde mir klar, dass ACF nur die Skripte in Admin verwendet und ich bin nurl10n
vorne also einfach die Aktion einwickeln und in einem!is_admin
Test filtern .