web-dev-qa-db-fra.com

Comment faire mourir mon code plugin

J'ai créé une classe pour mon travail et j'aimerais implémenter une forme de traitement des erreurs. Mais je suis nouveau à cette erreur de manipulation alouette.

Puis-je définir set_error_handler pour afficher uniquement certains messages (et peuvent-ils être des alertes wordpress dans la section admin)?

Et s'il y a une erreur fatale dans mon plugin (il n'y en a aucune sur mon développeur, mais j'essaie de détecter tout ce qui pourrait se produire sur un serveur live), existe-t-il un moyen de détecter cela pour éviter un crash du site? Ou écran blanc de la mort?

Je pense que sur une erreur fatale (ou tout ce qui pourrait ruiner le site), il doit être possible de désactiver automatiquement le plugin. et envoyez un message d'alerte wp.

Suis-je sur la bonne voie? Quelqu'un a-t-il un exemple à me montrer?

1
josh

Les erreurs fatales renvoient à une mauvaise syntaxe ou à de mauvaises conventions de dénomination. WordPress fait un bon travail en n'activant pas les plugins qui génèrent des erreurs fatales. Cependant, une fois qu'un plugin est activé, tous les paris sont désactivés. Si vous avez créé une fonction ou une classe, il est préférable de suivre correctement les conventions de dénomination et l'espace de nom.

Par exemple, une fonction appelée post_extras () ne serait pas un bon nom car elle risquerait fort d'entrer en conflit avec une autre fonction mal nommée provenant d'un autre plugin. Sélectionnez un préfixe d'espace de nom pour chaque plug-in unique au plug-in, tel que, foobar123_post_extras ().

Lorsque vous demandez aux personnes d'intégrer des balises de modèle à votre plug-in, vous devez isoler ces fonctions.

if(function_exists('foobar123_post_extras'){
      echo foobar123_post_extras();
}

Lors de la déclaration de classes ou de fonctions, isolez-les de la manière suivante:

if(!function_exists('foobar123_post_extras'){
     function foobar123_post_extras(){
             //do something
     }
}

if(!class_exists('FooBar123Class'){
      class FooBar123Class{
             //methods
      }
}

Il s'agit d'une pratique recommandée pour se prémunir contre les erreurs fatales liées aux conflits de fonctions et de noms de classes.

Si vous incluez un autre fichier dans vos plugins, vous pouvez certainement éviter les erreurs fatales en utilisant les fonctions d'inclusion plutôt que de faire appel à des fonctions. Consultez cet article pour plus d'informations. Vous pouvez désactiver le plugin si votre inclusion échoue de la manière suivante:

if(!include('includes/foobarinclude.php')){
     $plugins = get_option('active_plugins');
     $index = array_search(plugin_basename(__FILE__), $plugins);
     if($index){
          unset($plugins[$index]);
          update_option('active_plugins', $plugins);
     }
}

WordPress a un bon document pour les normes de codage ici concernant le style de la syntaxe.

Assurez-vous de ne pas utiliser les balises courtes php car elles provoqueront des erreurs sur les serveurs sur lesquels aucune balise courte n'est activée.

<?= - short tag
<?php echo - proper

Pour les problèmes de base de données, utilisez toujours la classe $ wpdb lorsque vous interrogez la base de données. Vous ne pouvez pas compter sur les utilisateurs pour avoir le même préfixe de base de données que vous utilisez.

global $wpdb;
$results = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_type = 'page' AND post_status = 'publish' LIMIT 5");

Enfin, avant de publier un plugin, il est important de placer le commutateur WP_DEBUG dans votre environnement local pour voir si vous utilisez des fonctions WordPress obsolètes ou si vous causez d'autres conflits. Si une fonction disparaît dans une future version, cela causera certainement des problèmes fatals avec votre plugin. Pour utiliser WP_DEBUG, ajoutez simplement ceci dans votre fichier wp-config.php:

define('WP_DEBUG', true);

J'espère que cela aide à vous donner des indices.

3
Brian Fegter