有趣的是,WordPress似乎内置了在激活时显示插件错误和输出的功能。如果你看看wp-admin/plugins.php
有个案子$action
switch语句表示error_scrape
-- 拉尔斯的回答暗示了这一点。
如下所示:
<?php
// wp-admin/plugins.php
case \'error_scrape\':
if ( ! current_user_can(\'activate_plugins\') )
wp_die(__(\'You do not have sufficient permissions to activate plugins for this site.\'));
check_admin_referer(\'plugin-activation-error_\' . $plugin);
$valid = validate_plugin($plugin);
if ( is_wp_error($valid) )
wp_die($valid);
if ( ! WP_DEBUG ) {
error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );
}
@ini_set(\'display_errors\', true); //Ensure that Fatal errors are displayed.
// Go back to "sandbox" scope so we get the same errors as before
function plugin_sandbox_scrape( $plugin ) {
include( WP_PLUGIN_DIR . \'/\' . $plugin );
}
plugin_sandbox_scrape( $plugin );
do_action(\'activate_\' . $plugin);
exit;
break;
如您所见,它模仿了插件激活senario,但实际上并没有激活插件。它包含插件文件,调用激活挂钩,然后退出。这一切都是在没有输出缓冲的情况下完成的,因此您可以看到发生了什么。
所以,如果那已经存在了,我们只需要把它暴露出来。一点挖掘wp-admin/plugins.php
显示我们需要一个nonce来验证。所以我们可以复制它,并研究插件列表如何构建其激活链接。然后只需在非活动插件上添加一个错误清除链接。单击它,查看您的错误。
只需钩住plugin_action_links
并添加链接:
<?php
add_filter(\'plugin_action_links\', \'wpse24278_add_scrape\', 10, 2);
/**
* Add an "Error Scrape" action to inactive plugins.
*
* @uses is_plugin_active
* @return array
*/
function wpse24278_add_scrape($actions, $plugin)
{
global $status, $page, $s;
// leave active plugins alone
if (is_plugin_active($plugin)) {
return $actions;
}
// build the url, identical to the activate URL, see the
// plugings list table for more information.
$url = add_query_arg(array(
\'action\' => \'error_scrape\',
\'plugin\' => $plugin,
\'plugin_status\' => $status,
\'paged\' => $page,
\'s\' => $s,
), admin_url(\'plugins.php\'));
// add our action.
$actions[\'error_scrape\'] = sprintf(
\'<a href="%s" title="%s" class="edit">%s</a>\',
wp_nonce_url($url, \'plugin-activation-error_\' . $plugin), // see `wp-admin/plugins.php` for the nonce name
esc_attr__(\'Check for Errors\', \'wpse\'),
esc_html__(\'Error Scrape\', \'wpse\')
);
return $actions;
}
这是上面的
wrapped up in a plugin.