it-swarm.com.de

Fügen Sie ein Skript als Abhängigkeit zu einem registrierten Skript hinzu

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.

6
Stephen Harris

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.

Anwendungsbeispiel

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.

}
12
Stephen Harris

Es gibt keine festgelegte Möglichkeit, Details der registrierten Skript-/Stilabhängigkeit nach der Registrierung zu ändern. Ihre Möglichkeiten sind:

  • abmelden und erneut mit den gewünschten Daten registrieren
  • daten in der entsprechenden globalen Variablen ändern
  • behandeln Sie das Timing auf andere Weise, wie z. B. manuelle Ausgabe und Hook-Prioritäten
4
Rarst