Je développe un plugin pour la passerelle de paiement woocommerce.
Lorsque je mets le code de définition de classe à l'intérieur de la fonction de rappel qui est déclenchée par 'plugins_loaded', cela fonctionne.
<?php
add_action('plugins_loaded','WC_test_gateway_plugin');
function WC_test_gateway_plugin{
class my_gateway extends WC_Payment_Gateways{
//code
}
}
?>
Mais quand je le mets dans la portée globale, il montrera que le WC_Payment_Gateways est indéfini.
<?php
class my_gateway extends WC_Payment_Gateways{
//code
}
?>
Quelle est la différence entre ces 2 pratiques?
Est-ce une mauvaise pratique de mettre la définition de classe dans la fonction de rappel? Un meilleur moyen pour ça?
Utilisez votre définition de classe dans un fichier séparé, par exemple dans /your-plugin-dir/classes/my-gateway.php
comme d'habitude:
<?php
class my_gateway extends WC_Payment_Gateways {
//code
}
?>
Puis utilisez ce CODE pour inclure le fichier dans l'action plugins_loaded
de votre fichier de plugin principal:
add_action('plugins_loaded', 'WC_test_gateway_plugin');
function WC_test_gateway_plugin {
require_once plugin_dir_path( __FILE__ ) . 'classes/my-gateway.php';
// instantiate your class here or in your class file or anywhere after this function is called.
}
Vous aurez maintenant accès à WC_Payment_Gateways
car à ce stade, WC_Payment_Gateways
est défini, car WordPress déclenche le hook action plugin_loaded
uniquement après que tous les plugins ont chargé leurs fichiers principaux.