it-swarm.com.de

Instanzvariable im Gültigkeitsbereich von 'wp_enqueue_scripts' abrufen

Ich brauche ein wenig Hilfe, um die Instanzvariable an einen Hook zu übergeben.

Ich lese die CSS-Dateien, die ich in meiner Vorlage benötige, dynamisch und speichere sie in einem $settings -Objekt, das ich im Gültigkeitsbereich meines Plugin-Namespaces behalte.

Also möchte ich so etwas machen:

add_action( 'wp_enqueue_scripts',function() {
    \mynamespace\ScriptQueuer::QueueCss($settings->GetCss());
} );

aber natürlich muss ich den Rückgabewert $settings->GetCss() irgendwie in den Gültigkeitsbereich übertragen.

Mache ich mein $settings Objekt irgendwie global? Ich bin mir nicht sicher, wie ich das machen soll und auch nicht sicher, ob es der beste Ansatz ist. Gibt es irgendetwas, um dies zu erreichen, oder muss ich alle CSS-Dateien in einer statischen Funktion fest codieren lassen?

5
Guerrilla

Der beste Weg, dies zu lösen, besteht darin, den Code zu vereinfachen. Derzeit ist ScriptQueuer::QueueCss() nur eine statische Methode, und die Daten werden zu spät abgerufen.

Sie könnten stattdessen ein unveränderliches Objekt verwenden und dann einfach eine seiner Methoden als Rückruf registrieren.

Beispiel:

class Enqueuer {

    private $stylesheets;

    public function __construct( ArrayObject $stylesheets ) {

        $this->stylesheets = $stylesheets;
    }

    public function enqueue() {

        foreach ( $this->stylesheets as $stylesheet )
            wp_enqueue_script(
                $stylesheet->handle(),
                $stylesheet->url(),
                $stylesheet->dependencies(),
                $stylesheet->version(),
                $stylesheet->in_footer()
            );
    }
}

add_action( 'wp_enqueue_scripts', [
    new Enqueuer( $settings->GetCss() ),
    'enqueue'
] );

Es müssen keine Daten an die Enqueue-Methode übergeben werden, es ist kein Schließen erforderlich, und der Code ist einfach zu lesen.

5
fuxia