Je fais un plugin wordpress. Quelles sont les choses typiques que je devrais inclure dans la fonctionnalité de désinstallation?
Par exemple, dois-je supprimer les tables que j'ai créées dans la fonction d'installation?
Est-ce que je nettoie mes entrées d'option?
Rien d'autre?
plugins
activation
uninstallation
deactivation
redconservatory
la source
la source
Réponses:
Il y a trois crochets différents . Ils se déclenchent dans les cas suivants:
Comment déclencher des fonctions en toute sécurité pendant les scénarios
Ce qui suit montre les bonnes manières d’accrocher en toute sécurité des fonctions de rappel déclenchées au cours des actions mentionnées.
Comme vous pourriez utiliser ce code dans un plugin qui utilise
Je vais montrer trois plugins de démonstration que vous pouvez inspecter, puis implémenter le code dans vos propres plugins.
Remarque importante dès le départ!
Comme ce sujet est extrêmement difficile et très détaillé et compte une douzaine de cas, cette réponse ne sera jamais parfaite. Je vais continuer à l'améliorer avec le temps, alors revenez régulièrement.
(1) Activer / Désactiver / Désinstaller des plugins.
Les rappels de configuration du plugin sont déclenchés par core et vous n’avez aucune influence sur la manière dont le core le fait. Il y a quelques points à garder à l'esprit:
echo/print
rien (!) Pendant les rappels d'installation. Cela conduira à unheaders already sent
message et le noyau recommandera de désactiver et de supprimer votre plugin ... ne demandez pas: je sais ...exit()
déclarations à tous les rappels afin que vous puissiez avoir un aperçu de ce qui se passe réellement. Il suffit de les commenter pour que les choses fonctionnent.__FILE__ != WP_PLUGIN_INSTALL
et (si ce n’est pas le cas: abandonnez!) Pour voir s’il désinstalle réellement le plug-in. Je recommanderais simplement de déclencher deson_deactivation()
rappels pendant le développement, afin de vous faire gagner du temps. Tout au moins, c'est ce que je fais.defined( 'ABSPATH' ) OR exit;
wp_die()
écran demandant les autorisations appropriées (et si vous voulez réessayer ... ouais, bien sûr ), lorsque vous recevez une erreur. Cela se produit lorsque le noyau vous redirige, définit le courant$GLOBALS['wp_list_table']->current_action();
surerror_scrape
, puis vérifie le référentcheck_admin_referer('plugin-activation-error_' . $plugin);
, où$plugin
est$_REQUEST['plugin']
. Donc, la redirection se produit à la moitié du chargement de la page et vous obtenez cette barre de défilement câblée et l'écran des puces insight la notification / message jaune de l'administrateur. Si cela se produit: restez calme et recherchez l'erreur avec unexit()
débogage pas à pas.(A) Plugin des fonctions simples
N'oubliez pas que cela pourrait ne pas fonctionner si vous associez les rappels avant la définition de la fonction.
(B) Une architecture de classe / POO
C'est l'exemple le plus courant dans les plugins actuels.
(C) Une architecture de classe / OOP avec un objet de configuration externe
Ce scénario suppose que vous avez un fichier de plugin principal et un second fichier nommé
setup.php
dans un sous - répertoire du plugin nomméinc
:~/wp-content/plugins/your_plugin/inc/setup.php
. Cela fonctionnera également lorsque le dossier du plug-in se trouve en dehors de la structure de dossiers WP par défaut, ainsi que lorsque le répertoire de contenu est renommé ou dans les cas où votre fichier d'installation porte un nom différent. Seul leinc
dossier doit avoir le même nom et le même emplacement que le répertoire racine des plugins.Note: Vous pouvez simplement prendre les trois
register_*_hook()*
fonctions et les classes et les déposer dans votre plugin.Le fichier de plugin principal:
Le fichier d'installation:
(2) Mises à jour du plugin
Si vous écrivez un plug-in qui possède sa propre table de base de données ou ses propres options, il peut arriver que vous deviez modifier ou mettre à niveau des éléments.
Malheureusement, il n’existe jusqu’à présent aucune possibilité d’exécuter quelque chose sur l’installation ou la mise à jour / mise à niveau du plugin / thème. Heureusement, il existe un moyen de contourner le problème: associez une fonction personnalisée à une option personnalisée (oui, c'est nul, mais cela fonctionne).
La source
Cette fonction de mise à jour est un exemple pas très agréable / bien écrit, mais comme il est dit: C’est un exemple et la technique fonctionne bien. Améliorera cela avec une mise à jour ultérieure.
la source
check_admin_referer()
. Ils n'ont pas besoin d'être désinfectés, car le noyau ne le fait pas lui-même et le comparerait de toute façon à des$_REQUEST
valeurs non normalisées . Mais si elles se mettent à pleurer comme des petites filles à cause de cela, utilisez-lesfilter_var()
ouesc_attr()
sur elles.Pour tester le système actuel des fonctionnalités requises telles que la version PHP ou les extensions installées, vous pouvez utiliser quelque chose comme ça:
Testez avec un contrôle pour PHP 5.5:
la source
register_activation_hook
- pourquoi ne pas l'utiliser? Aussi, ce feu va-t-il avant ou aprèsregister_activation_hook
et leregister_activation_hook
feu même si ce qui précède ne passe pas?add_action( 'admin_notices', 't5_check_admin_notices', 0 );
à un hook d'activation et le plugin s'active sans effectuer les vérifications. . .admin_notices
.