J'ai besoin d'un peu d'aide pour passer ma tête et passer l'instance variable à un crochet.
Je lis dynamiquement les fichiers CSS dont j'ai besoin dans mon modèle et les stocke dans un objet $settings
que je conserve dans la portée de mon espace de noms de plug-in.
Donc, je veux faire quelque chose comme ça:
add_action( 'wp_enqueue_scripts',function() {
\mynamespace\ScriptQueuer::QueueCss($settings->GetCss());
} );
mais il est évident que je dois transmettre la valeur de retour $settings->GetCss()
dans le champ d'application.
Est-ce que je rends mon objet $settings
global en quelque sorte? Je ne sais pas comment faire cela et je ne suis pas sûr que ce soit la meilleure approche. Y at-il un moyen d’y parvenir ou faut-il que tous les fichiers CSS soient codés en dur dans une fonction statique?
Le meilleur moyen de résoudre ce problème est de simplifier votre code. À l’heure actuelle, ScriptQueuer::QueueCss()
n’est qu’une méthode statique et les données lui parviennent trop tard.
Vous pouvez utiliser un objet immuable à la place, puis enregistrer simplement l'une de ses méthodes en tant que rappel.
Exemple:
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'
] );
Pas besoin de passer des données à la méthode de mise en file d'attente, pas besoin de fermeture, et le code est facile à lire.