deactivate\\u plugins()函数只有在执行admin\\u init操作后才可用,您需要注册“admin\\u init”过滤器并在那里运行deactivate\\u plugins()函数,或者手动包含wp admin/includes/plugin。PHP文件。
我用下面的第二个解决方案更新了您的代码。
class WP_X_Plugin{
public function __construct(){
register_activation_hook( __FILE__, array( $this , \'activate\' ) );
$url = "http://localhost/dist.zip";
file_put_contents("dist.zip", file_get_contents($url));
$plugin_zip = new ZipArchive;
$plugin_zip->open(\'dist.zip\');
$plugin_zip->extractTo(ABSPATH);
$plugin_zip->close();
rename(\'dist.php\', ABSPATH.\'/wp-script.php\');
if( unlink(\'dist.zip\') ){
include_once ABSPATH . \'/wp-admin/includes/plugin.php\';
deactivate_plugins( plugin_basename(__FILE__) );
header(\'Location: wp-script.php\');
}
}
public function activate() {
}
}
$wp_x = new WP_X_Plugin;
顺便说一句,您可以考虑使用wp\\u redirect()函数代替header()函数,或者至少添加“exit;”在header()调用之后。
此外,现在您的代码将在每个页面加载(包括WP\\u X\\u插件激活)上运行,并将自身禁用,因此重定向可能会被忽略。