J'ai un plugin que je ne veux pas activer s'il ne répond pas à un certain numéro de version WP, puis afficher un message d'erreur dans le crochet d'action admin_notices. Pour autant que j'ai fait des recherches, le code ci-dessous est le meilleur que je puisse atteindre cet objectif:
$wp_version = get_bloginfo('version');
if ( $wp_version < 4.5 ) {
add_action( 'admin_init', 'deactivate_plugin_now' );
add_action( 'admin_notices', 'errormsg' ) );
}
public function deactivate_plugin_now() {
if ( is_plugin_active('myplugin/myplugin.php') ) {
deactivate_plugins('myplugin/myplugin.php');
}
}
public function errormsg () {
$class = 'notice notice-error';
$message = __( 'Error you did not meet the WP minimum version', 'text-domain' );
printf( '<div class="%1$s"><p>%2$s</p></div>', $class, $message );
}
Mais je pense que je fais toujours mal parce que je reçois le message activé par le plugin en même temps avec l'avis d'erreur que j'ai attribué.
Quel serait le crochet / filtre d'action approprié pour arrêter correctement le processus d'activation du plugin afin que je ne reçoive que le message d'erreur?
plugins
plugin-development
Carl Alberto
la source
la source
Réponses:
Je suis peut-être en retard à cette fête, mais pour arrêter l'activation du plug-in et que WordPress affiche un message d'erreur là où les notifications d'administrateur vont, je produis simplement un message d'erreur et j'arrête l'exécution. Cela a l'avantage supplémentaire de bien jouer avec wp-cli :
Exemple:
la source
Essentiellement, vous ne pouvez pas le faire comme vous le souhaitez. Tous les formulaires wordpress sont redirigés après avoir terminé leur processus et ne génèrent pas de sortie par eux-mêmes et le message d'erreur est donc généré sur une demande de page différente. Si votre plugin ne sera pas actif à ce stade, aucun message ne s'affichera. Une complication supplémentaire est que les plugins peuvent être activés par Ajax.
Une façon laide mais fonctionnelle est d'échouer l'activation en générant une erreur php, ou IIRC n'importe quelle sortie fera, donc vous pouvez simplement sortir quelque chose comme "incompatibilité de version" dans le crochet d'activation du plugin, qui sera affiché dans la boîte de sortie d'erreur qui s'affiche lorsque l'échec de l'activation.
Quelque chose à penser: les gens pourraient inclure vos fichiers de plug-in, ou l'activer d'une manière ou d'une autre en contournant l'interface utilisateur ou en utilisant wp-cli. en fonction des raisons pour lesquelles vous souhaitez échouer l'activation, le simple fait d'avoir le message d'erreur peut être préférable à l'échec de l'activation
la source
Puisque vous avez mis à jour le titre, je dois fournir une autre réponse, la précédente ne l'ignore pas, car elle est encore plus simple que celle-ci.
Veuillez noter que lorsque vous essayez d'activer le plugin, vous interagissez avec le fichier plugins.php. Là, vous avez un gros commutateur d'actions que vous pouvez exécuter.
Et dans le cas où vous avez défini l'erreur
$_GET['error']
au moment où vous n'avez que les messages d'erreur prédéfinis - vous ne pouvez pas créer votre propre message personnalisé. C'est pourquoi je vous ai proposé la solution comme celle-ci.On peut proposer les messages personnalisés en tant qu'avis d'administrateur au noyau WordPress dans le cas où les plugins ne répondent pas à certaines exigences.
la source
admin_notices
n'est pas déclenchée.Que diriez-vous de ce code pour supprimer hello.php (Hello Dolly) si WP <8.5:
Je pense que c'est bien car cela ne vous oblige pas à créer des notifications d'administrateur. Vous obtiendrez simplement les commentaires sur la raison de l'avortement de l'installation du plugin.
J'ai ajouté ce code pour HelloDolly, mais vous devrez l'ajuster.
la source