web-dev-qa-db-fra.com

Quel est le 'admin_action_'. Crochet $ _REQUEST ['action'] utilisé pour?

Il y a un crochet d'action déclenché dans admin.php appelé 'admin_action_'.$_REQUEST['action']. Malheureusement, c'est un peu inutile pour les plugins car il est déclenché à la toute fin de admin.php, après que tout soit chargé sur la page (même le pied de page).

Est-ce que quelqu'un sait pourquoi c'est là, pourquoi dans cette position idiote et si quelque chose l'utilise en interne?

3
wyrfel

Via la fonction "Annoter" du Trac, vous pouvez voir qu'il a été ajouté il y a trois ans , après la demande de un gestionnaire générique POST que les plugins peuvent utiliser .

La recherche de code Google me dit que au moins Akismet utilise ce crochet , et il y figurait au moment où il a été introduit dans core . Cela fonctionne en appelant directement admin.php (et non la page du plugin). À partir de là il peut juste faire une redirection à la fin . L'astuce consiste donc à appeler admin.php?action=your_action, il n'est pas garanti que les autres URL fonctionnent.

De nombreuses pages d'administration (mais pas toutes) incluent admin.php, comme une sorte d'initialisation. Dans ce cas, votre action serait déclenchée avant l'envoi de toute sortie, car la page d'administration inclut admin-header.php après admin.php. Cela ne fonctionnera pas sur toutes les pages d'administration: elles n'incluent pas toutes admin.php, et d'autres vérifient les variables de requête "non autorisées" action et vous donnent un "Êtes-vous sûr de vouloir faire cela?" warning ( à cause des absences manquantes? ). Pour un plugin, la page admin.php fait tout : elle affiche l'en-tête ( sauf si la variable de requête noheader est dans l'URL ), appelle votre page et affiche le pied de page (sauf si vous avez appelé exit() dans votre code!). . admin.php appelle ensuite exit() lui-même, le hook admin_action_ n'y est même pas appelé.

6
Jan Fabry