致命错误指向错误的语法或错误的命名约定。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);
希望这能给你一些线索。