使用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