À l'intérieur de functions.php:
add_action('init','my_action');
function my_action() {
if($dontknow) {
$passme = "yes";
} else {
$passme = "no";
}
}
Dans index.php du thème actuel:
echo $passme;
Y at-il un global à utiliser à cette fin? Dois-je utiliser add_option (ce n'est pas une bonne idée pour chaque demande, je suppose)? Dois-je utiliser une variable globale personnalisée?
Y a-t-il un moyen meilleur/habituel/standard de le faire?
Utilisez un objet pour conserver la valeur de la variable et une action personnalisée pour l’imprimer.
Dans le functions.php
de votre thème, créez une classe, ou mieux: déplacez la classe dans un fichier séparé.
class PassCheck
{
private $passed = 'no';
public function check()
{
if ( is_user_logged_in() )
$this->passed = 'yes';
}
public function print_pass()
{
echo $this->passed;
}
}
Puis enregistrez les rappels:
$passcheck = new PassCheck;
add_action( 'init', [ $passcheck, 'check' ] );
add_action( 'print_pass', [ $passcheck, 'print_pass' ] );
Et dans votre modèle, appelez l'action appropriée:
do_action( 'print_pass' );
De cette façon, le modèle n'a pas de dépendance statique sur la classe: si vous décidez de supprimer la classe ou d'enregistrer un rappel complètement différent pour cette action, le thème ne sera pas interrompu.
Vous pouvez également déplacer le rappel check()
vers une autre action (comme wp_loaded
) ou le séparer ultérieurement dans une autre classe.
En règle générale, les modèles (vues) doivent être autant que possible dissociés de la logique métier. Ils ne devraient pas connaître les noms de classe ou de fonction. Ce n’est pas tout à fait possible dans l’architecture de WordPress, mais reste une bonne idée de régulation.
Cela dépend vraiment du cas d'utilisation. Tout ce qui écrit dans la base de données est probablement excessif. Les globales sont en désordre. Vous pouvez définir une constante. Vous pouvez transformer la fonction en méthode de classe et créer une méthode supplémentaire pour renvoyer la variable. Vous pouvez seulement cocher $passme
quand c'est nécessaire, au lieu d'init.
Sans plus de détails, il est difficile de juger, mais vous avez l’impression que vous avez mal écrit my_action
et que vous essayez de faire trop de choses.
Le hook init
devrait être utilisé uniquement pour initialiser tout ce dont vous avez besoin, vous ne devriez pas précalculer les valeurs qu'il contient. Cela devrait être fait uniquement lorsque le besoin s'en fait sentir.
Vous devriez simplement avoir une fonction appelée print_pass
et l'appeler partout où vous en avez besoin.
Faire trop avec le hook init
viole le principe du retardement de l'exécution du code autant que possible. Dans ce cas, le hook init
exécutera votre logique passme
même lors de la gestion d'un administrateur dans lequel cette valeur n'est pas nécessaire.
En ce qui concerne la réponse de @ toshco, oui, si vous avez une logique qui pourrait être mieux décrite avec des objets, alors print_pass
devrait probablement être une méthode de la classe, mais le système de hook wordpress est de nature fonctionnelle, et il n’est pas nécessaire d’utiliser OOP quand l'approche fonctionnelle sera suffisante. Fonctionnel est simplement plus lisible dans le fonctionnement du système de hook wordpress.