是否可以在某个插件未激活时停止主题激活

时间:2014-05-05 作者:Ilyes512

所以我正在计划一个主题,它将依赖于一个插件(例如TimberThemosis). 因此,如果主题无法使用,它当然会中断,这取决于插件的。因此,我想找到一种方法来阻止用户激活需要某个插件才能工作的主题,并显示一条包含所需插件的友好错误消息。

到目前为止,我发现了如何检查插件是否已安装(link), 但是如果可能的话,如何阻止主题被激活呢?

我还发现了switch_theme 以及after_switch_theme 行动。

所以我现在缺少的是一种停止实际激活的方法。这可能吗?

编辑:找到this 用于显示管理员通知/警告。

4 个回复
SO网友:Sven

使用after_switch_theme 将激活主题(这很好,因为我们希望在新主题的上下文中运行检查)。

如果未满足依赖关系($missing_dependencies = true;) 我们立即切换回以前使用的主题(通过after_switch_theme$oldtheme).

add_action( \'after_switch_theme\', \'check_theme_dependencies\', 10, 2 );
function check_theme_dependencies( $oldtheme_name, $oldtheme ) {
  if ( $missing_dependencies ) :

    // Update default admin notice: Theme not activated.
    add_filter( \'gettext\', \'update_activation_admin_notice\', 10, 3 );

    // Custom styling for default admin notice.
    add_action( \'admin_head\', \'error_activation_admin_notice\' );

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

  endif;
}

function update_activation_admin_notice( $translated, $original, $domain ) {
    // Strings to translate.
    $strings = array(
        \'New theme activated.\' => \'Theme not activated.\'
    );

    if ( isset( $strings[$original] ) ) {
        // Translate but without running all the filters again.
        $translations = get_translations_for_domain( $domain );
        $translated = $translations->translate( $strings[$original] );
    }

    return $translated;
}

function error_activation_admin_notice() {
  echo \'<style>#message2{border-left-color:#dc3232;}</style>\';
}
您可以在functions.php, 但要确保after_switch_theme 在所需依赖项之前调用。

更新:似乎没有一种简单的方法可以阻止通过switch_theme 作用通过覆盖消息gettext 过滤器似乎是一个很好的解决方法。

幸亏@alpipego 告诉我如何覆盖WordPress核心中的字符串:)

进一步阅读:Changing Core WordPress Strings

SO网友:s_ha_dum

我不知道如何防止主题切换(虽然可能有办法),但我可以想出一个解决方法。

after_switch_theme passes the old theme name 通过

do_action( \'after_switch_theme\', $old_theme->get( \'Name\' ), $old_theme );
。。。因此,您应该能够检查该操作上的插件,然后在插件不活动/不存在时重置为旧主题。这个switch_theme() 函数将允许您通过编程切换主题。只需给它一个样式表slug。我刚刚回答了一个related question 这也可能有助于解决这个问题。

SO网友:user51165

如果插件是您正在开发的,那么您就不能将其包含在主题中吗?这种方法的缺点包括不单独更新插件,但是如果您的主题依赖于特定插件的特定版本,那么只要您修补所需的插件,它就可以正常工作。

SO网友:MathSmath

我认为这不会阻止任何人激活主题,但这里有一个类用于将插件依赖关系附加到主题(或其他插件):https://github.com/thomasgriffin/TGM-Plugin-Activation

至少,它会添加所有UI通知和NAG,以便管理员知道它们缺少什么。它甚至添加链接来安装缺失的依赖项。很酷。

结束

相关推荐

来自WooThemes的快照主题-空的‘alt’属性

我正在使用WooThemes的快照主题。调整大小(宽度、高度和大小,以kb为单位)并显示图像(一个“a”标记,包装一个“img”标记)的代码如下:<?php if ( get_option(\'woo_resize\') ) { woo_get_image(\'image\',\'210\',\'280\');?> 问题是:我在发帖时设置了“alt”文本,当试图查看帖子图片源代码时,“alt”属性显示为空。以前有人通过过这个吗?有什么建议吗?我希望具有“alt”属性的帖子是第一行第