Prevent theme from activating

时间:2014-12-14 作者:somebodysomewhere

我正在处理一个只在主题激活时运行一次代码的主题(使用after_switch_theme 挂钩)。我想知道如果某些要求没有得到满足,是否可以安全地阻止我的主题被激活。

具体来说,我想检查WPML是否已安装并激活,如果未安装并激活,则阻止激活我的主题。检查WPML是否被激活不是问题,我的问题是如何安全地阻止主题被激活。恐怕使用PHP的die() 可能会导致主题处于半激活状态的问题。即使die() 如果要正常工作,我仍然需要激活另一个主题,然后激活WPML,最后再重新激活我的主题。

下面是理想情况下的代码:

add_action(\'after_switch_theme\', \'theme_custom_install\');
function theme_custom_install() {
    if( $wpml_is_missing ) {
        prevent_theme_switch();
    }
}
有没有一种本地的WP方法可以做到这一点,或者有没有一个插件可以做到这一点?

1 个回复
最合适的回答,由SO网友:Sven 整理而成

使用after_switch_theme 将激活主题(这很好,因为我们希望在新主题的上下文中运行检查)。因此,如果检查失败,我们可以简单地切换回上一个主题(通过after_switch_theme$oldtheme).

如果缺少WPML($wpml_is_missing = true;) 我们将输出一个管理通知,并使用switch_theme() 像这样:

add_action( \'after_switch_theme\', \'check_required_theme_plugins\', 10, 2 );
function check_required_theme_plugins( $oldtheme_name, $oldtheme ) {

  if ( $wpml_is_missing ) :

    // Info message: Theme not activated
    add_action( \'admin_notices\', \'not_activated_admin_notice\' );
    function not_activated_admin_notice() {
      echo \'<div class="update-nag">\';
      _e( \'Theme not activated: this theme requires WPML.\', \'text-domain\' );
      echo \'</div>\';
    }

    // Switch back to previous theme
    switch_theme( $oldtheme->stylesheet );
      return false;

  endif;

}
您可以在functions.php, 但要确保after_switch_theme 在需要WPML之前调用。

结束

相关推荐