Je ne suis même pas sûr que cela soit possible. Mais néanmoins j'ai pensé à demander. J'ai l'habitude de grouper/grouper AJAX pour un besoin particulier au sein d'une classe. Voir ci-dessous.
class my_class {
function __construct() {
$this->hooks();
}
function hooks() {
add_action('wp_ajax_my_action', array($this, 'my_action_callback'));
}
function my_action_callback() {
// do something
}
}
Maintenant, pour que le rappel AJAX fonctionne, je dois ajouter ce qui suit à functions.php
(sans le placer dans une fonction) pour instancier la classe et faire fonctionner le rappel.
$my_class = new my_class;
Ceci ajoute $my_class
à l'espace de noms global
. Quelque chose que je voudrais éviter. Une idée sur la façon dont je peux enregistrer la fonction de rappel AJAX sans instancier la classe dans functions.php
?
Si vous utilisez une classe qui nécessite une instance de, vous devez créer cette instance quelque part . Actuellement, WP n'a pas de convention désignée pour quelque chose comme ça.
La pratique courante consiste à utiliser des méthodes statiques afin que votre hook devienne add_action('wp_ajax_my_action', array(__CLASS__, 'my_action_callback'));
.
Voici un exemple de classe que j'utilise pour créer automatiquement des rappels ajax à partir de méthodes de la classe. Il agit presque comme un routeur.
class AjaxEndpoint {
//Loop through all functions and add them as ajax actions
public function registerActions() {
foreach ( get_class_methods( $this ) as $method_name ) {
if ( $method_name !== 'registerActions' ) {
add_action( "wp_ajax_".$method_name, array( $this, $method_name ) );
//add_action( "wp_ajax_nopriv_".$method_name, array( $this, $method_name ) );
}
}
}
}