我正在开发一个插件,我们称之为DahPlugin,它为我开发的免费主题提供了额外的定制选项。让我们把这个主题称为DahTheme(我不想无耻地在这里插入其中任何一个)。
所以我要做的是DahPlugin 将自动deactivated 当用户更改主题时DahTheme.
我在这里找到了以下代码片段:disable active plugins for specific theme, 如果您想在某个主题处于活动状态时禁用插件,那么这一点非常有效。
所以我决定聪明一点,在我的主题中运用它,并转换逻辑。所以我将比较运算符从==
(等于)!=
(不相等)。。。我的想法:如果当前主题名称不等于“DahTheme,然后停用DahPlugin“下面是它的样子:
if ( ! function_exists(\'disable_plugins\')) :
function disable_plugins(){
include_once(ABSPATH.\'wp-admin/includes/plugin.php\');
$current_theme = wp_get_theme();
$current_theme_name = $current_theme->Name;
if($current_theme_name == \'DahTheme\'){
if ( is_plugin_active(\'dahplugin/dahplugin.php\') ) {
deactivate_plugins(\'dahplugin/dahplugin.php\');
}
}
}
add_action(\'after_switch_theme\',\'disable_plugins\');
endif;
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。。。英雄联盟当然,只要我觉得自己很聪明,这种情况就会发生。
因此,我一直在绞尽脑汁,四处寻找,试图找出它不起作用的原因,但我似乎也找不到。
谁能告诉我为什么它不起作用,为什么我的思路是错误的。我们将不胜感激。
提前感谢您的帮助。
SO网友:Tom J Nowell
整个方法都是倒退的。问题不是在主题切换时停用,而是确保插件不可用,除非为其构建的主题处于活动状态。
因此,检查应该在插件中,而不是主题中
因此,让我们从确定哪个主题是活动的开始,我们可以通过wp_get_theme
documented here
然后在上的插件中注册一个钩子admin_init
:
add_action( \'admin_init\', function() {
$theme = wp_get_theme();
} );
然后,如果主题不是预期的主题,请停用:
if ( $theme->headers[\'name\'] !== \'DahTheme\' ) {
deactivate_plugins( plugin_basename( __FILE__ ) );
}
请注意,deactivate\\u plugins是复数形式,它需要一个绝对路径。因为使用
__FILE__
, 此检查必须在主插件文件中。
尽管如此,当切换回“DahTheme”时,这会使事情变得复杂,因为现在插件处于非活动状态,所以最好先进行检查,然后尽早返回,这样插件就什么都不做,而不是停用。这样,就不会为不兼容的主题提供自定义程序选项,并且在用户预览主题或切换回主题时也不会出现问题
SO网友:Deepak Rajpal
这并不是对所提问题的确切答案。然而,这将对许多人有所帮助who are looking to perform certain action after activation or deactivation of themes.
// Perform action when your theme is deactivated (actually switched to another)
add_action( \'switch_theme\', \'action_switch_theme\', 10, 1 );
function action_switch_theme( ) {
// deactivate your plugin
};
// Perform action after your theme is activated (switched from other theme)
add_action( \'after_switch_theme\', \'action_after_switch_theme\', 10, 1 );
function action_after_switch_theme( ) {
// activate your plugin
};