Mit wp_register_script()
(siehe codex ) können Sie Abhängigkeiten angeben: Skripte, die geladen werden müssen, bevor die zu registrierende geladen wird (falls geladen).
Angenommen, das Skript ist ein Skript eines Drittanbieters (WordPress oder ein anderes Plug-In), sodass Sie nicht derjenige sind, der wp_register_script()
aufruft. Wie können Sie ein Skript als Abhängigkeit für ein vorregistriertes Skript einfügen?
Bemerkungen: In meinem speziellen Anwendungsfall ist die Abhängigkeit nicht streng - das registrierte Skript erfordert nicht dieses zweite Skript, aber das letztere ändert das ursprüngliche Skript.
Eine ähnliche Frage könnte für Stile gestellt werden, aber ich vermute, die Antworten wären nahezu identisch.
Durchstöbern https://github.com/WordPress/WordPress/blob/3.5.1/wp-includes/class.wp-dependencies.php Alle registrierten Skripte werden im globalen $wp_scripts
gespeichert.
Sie können direkt darauf zugreifen, aber ich bevorzuge es, die API zu verwenden, wenn sie existiert. In diesem Fall gibt $wp_scripts->query()
ein bestimmtes registriertes Skript zurück (ein _WP_Dependency
-Objekt - siehe Quelle ).
Ein _WP_Dependency
-Objekt speichert die Abhängigkeiten als Array von Handles, auf die Sie direkt zugreifen können, und fügt eine Abhängigkeit ein. Die folgende Funktion macht das:
/**
* Add $dep (script handle) to the array of dependencies for $handle
* @see http://wordpress.stackexchange.com/questions/100709/add-a-script-as-a-dependency-to-a-registered-script
* @param string $handle Script handle for which you want to add a dependency
* @param string $dep Script handle - the dependency you wish to add
*/
function wpse100709_append_dependency( $handle, $dep ){
global $wp_scripts;
$script = $wp_scripts->query( $handle, 'registered' );
if( !$script )
return false;
if( !in_array( $dep, $script->deps ) ){
$script->deps[] = $dep;
}
return true;
}
Offensichtlich müssen Sie dies irgendwo zwischen dem registrierten Original-Skript ($handle
) und dem in die Warteschlange gestellten Skript einfügen.
Angenommen, script_a
wurde für den Hook init
mit der Priorität 10 registriert und Sie möchten script_b
als Abhängigkeit hinzufügen:
add_action( 'init', 'wpse100709_register_script_b', 11 );
function wpse100709_register_script_b(){
//Register script b
wp_register_script( 'script_b', ... );
//Now add script b as being a pre-requisite for script a
wpse100709_append_dependency( 'script_a', 'script_b' )
//If script a is enqueued, script b is enqueued before it.
}
Es gibt keine festgelegte Möglichkeit, Details der registrierten Skript-/Stilabhängigkeit nach der Registrierung zu ändern. Ihre Möglichkeiten sind: