Je développe un plugin et je réfléchis simplement aux meilleures pratiques. Est-il courant d'avoir un objet global? Actuellement sur plugins_loaded
je crée un objet global de ma classe:
add_action( 'plugins_loaded', array( 'Test_Plugin', 'init' ) );
...
public static function init() {
global $testerski;
$testerski = __CLASS__;
$testerski = new $testerski;
}
Cela me permet d’utiliser le global $testerski
pour appeler des variables ou des méthodes. Est-ce une pratique courante?
Mon autre souci est que, depuis que je crée un objet global et, à ma connaissance, tous les crochets doivent avoir des fonctions publiques pour que WordPress puisse les appeler. Le problème est que je peux appeler ces fonctions destinées aux points d'ancrage à partir de mon objet global. Par exemple, j'ai des hooks enregistrés en tant que:
public function __construct() {
add_action( 'init', array( $this, 'test_plugin_setup' ) );
add_action( 'template_include', array( $this, 'test_templates' ) );
add_filter( 'cron_schedules', array( $this, 'test_add_monthly_schedule' ) );
}
public function test_templates( $template ) {
...
}
Ce que je pourrais appeler techniquement à l’aide de $testerski->test_templates()
. Etant donné que cette fonction ne doit pas vraiment être appelée directement et utilisée uniquement pour les hooks, y a-t-il un moyen de l'empêcher d'appeler directement de cette façon? Est-ce que quelque chose comme ceci est dangereux ou suis-je en train de penser?
J'ai remarqué que certains hooks ont des avertissements, tels que wp_enqueue_scripts
vous avertira qu'il a été appelé de manière incorrecte.
Ce n'est pas une pratique courante, mais cela fonctionne. Une meilleure approche consiste à utiliser une classe et avec le modèle singleton, tout comme WooCommerce et beaucoup d'autres, où vous avez:
instance
, getInstance
...) qui: Continuons avec l'exemple de WooCommerce; nous avions l'habitude de faire cela pour accéder à l'objet global:
global $woocommerce;
Maintenant nous faisons:
WooCommerce::instance();
# Or with the handy Shortcut
WC();
Je pense que vous aurez plaisir à lire ces:
Vous pouvez vérifier la valeur de current_filter()
dans votre méthode, mais si j'étais vous, cela ne me dérangerait pas. Ce n'est pas une menace, et d'autres développeurs voudront peut-être utiliser votre code, alors ne les bloquez pas.