问题是not version_compare
, 问题是register_activation_hook
只是
add_action( \'activate_\' . $file, $function );
在哪里
$file
是
plugin_basename( __FILE__ );
和
__FILE__
是主插件文件的绝对路径。
因此,您的代码所做的是调用dw_deactivate_theme_options()
当操作\'activate_\' . $plugin
已启动。
但此操作是在插件激活之前,即在插件添加到选项之前启动的\'active_plugins\'
.
简而言之,您正试图停用一个尚未激活的插件,因此您的功能不起任何作用。
有两种简单的方法可以避免插件在注册的函数中的某些情况下被激活register_activation_hook
:
第一个是重定向:
function dw_deactivate_theme_options() {
if ( version_compare( get_bloginfo(\'version\'), \'4.0\', \'<\') ) {
global $status, $paged, $s;
$url = self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" );
wp_redirect( $url );
exit();
}
}
这是可行的,但用户只看到页面被重新加载,插件没有激活,但没有任何错误消息。。。这不是很直观
第二种可能更好的方法是die
在函数内部,这样插件就不会被激活,您可以向用户提供反馈,将消息放入die
功能:
function dw_deactivate_theme_options() {
if ( version_compare( get_bloginfo(\'version\'), \'4.0\', \'<\') ) {
$message = "Impossible activate Theme Settings plugin because ";
$message .= "WordPress version is lower than 4.0";
die( $message );
}
}
这样插件就不会被激活,用户会看到一条消息,即使WordPress会说你的插件触发了致命错误。。