如何让我的插件代码优雅地死去

时间:2011-12-22 作者:josh

我已经为我的函数设置了一个类,我想实现某种形式的错误处理。但我对这种错误处理百灵鸟还不熟悉。

我是否可以将\\u error\\u handler设置为仅显示某些消息(这些消息可以作为管理部分中的wordpress警报)?

如果我的插件中有致命错误(我的开发设置中没有错误,但我正在尝试捕获实时服务器上可能发生的任何错误),是否有方法捕获此错误以避免站点崩溃?还是死亡的白幕?

我在想,如果出现致命错误(或其他任何可能破坏网站的错误),是否有可能自动停用插件?并发送wp警报消息。

我走对了吗?有人能给我举个例子吗?

1 个回复
SO网友:Brian Fegter

致命错误指向错误的语法或错误的命名约定。WordPress在不激活抛出致命错误的插件方面做得很好。然而,一旦插件被激活,所有的赌注都将被取消。如果您已经创建了一个函数或类,那么最好遵循良好的命名约定和名称空间。

例如,一个名为post\\u extras()的函数不是一个好名字,因为它很可能会与另一个插件的另一个名称不正确的函数冲突。为插件本身唯一的每个插件选择命名空间前缀,例如foobar123\\u post\\u extras()。

当要求人们为你的插件嵌入模板标签时,你应该隔离这些功能。

if(function_exists(\'foobar123_post_extras\'){
      echo foobar123_post_extras();
}
声明类或函数时,以这种方式隔离它们:

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

if(!class_exists(\'FooBar123Class\'){
      class FooBar123Class{
             //methods
      }
}
这是防止函数和类名冲突导致致命错误的最佳实践。

如果您在插件中包含任何其他文件,您当然可以通过使用include函数而不是require函数来减少致命错误。退房this article 了解更多信息。如果您的Include失败,您可以停用该插件,如下所示:

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有一个很好的编码标准文档here 关于语法样式。

确保您没有使用php短标记,因为它们会在未启用短标记的服务器上导致错误。

<?= - short tag
<?php echo - proper
对于数据库问题,在查询数据库时始终使用$wpdb类。您不能指望用户具有与您使用的相同的db前缀。

global $wpdb;
$results = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_type = \'page\' AND post_status = \'publish\' LIMIT 5");
最后,在发布插件之前,需要导入在本地环境中抛出WP\\u DEBUG开关,以查看您是否正在使用不推荐的WordPress函数或导致其他冲突。如果函数在将来的版本中消失,它肯定会导致插件出现致命问题。要使用WP\\u DEBUG,只需将其添加到WP配置中即可。php文件:

define(\'WP_DEBUG\', true);
希望这能给你一些线索。

结束

相关推荐

Displaying oEmbed errors?

有时,通过oEmbed嵌入项目是不可能的,例如,当YouTube视频已禁用嵌入时。The oEmbed service will return a 401 Unauthorized, 并且不会转换代码。有没有办法通知用户这一点?当前的工作流是非直观的(至少对我来说),我更喜欢在WordPress页面上,或者更好的是,在编辑器中显示一条消息,说明对象无法嵌入。