4

我正在尝试使用钩子在主题激活时设置图像大小,after_setup_theme但它似乎从未真正被调用过。为什么?

if( !function_exists('theme_image_size_setup') )
{
    function theme_image_size_setup()
    {
        //Setting thumbnail size
        update_option('thumbnail_size_w', 200);
        update_option('thumbnail_size_h', 200);
        update_option('thumbnail_crop', 1);
        //Setting medium size
        update_option('medium_size_w', 400);
        update_option('medium_size_h', 9999);
        //Setting large size
        update_option('large_size_w', 800);
        update_option('large_size_h', 9999);
    }
}
add_action( 'after_setup_theme ', 'theme_image_size_setup' );

相反,我做了一个解决方案,但如果有一个钩子,它不会感觉最佳:

if ( is_admin() && isset($_GET['activated'] ) && $pagenow == 'themes.php' ) {
    theme_image_size_setup();
}

这行得通...但是为什么没有响应after_setup_theme

4

4 回答 4

6

这只会在您的主题从另一个主题切换到时运行。这是最接近主题激活的方法:

add_action("after_switch_theme", "mytheme_do_something");

或者,您可以在 wp_options 表中保存一个选项,并在每次页面加载时检查该选项,尽管这对我来说似乎效率低下,但很多人都建议这样做:

function wp_register_theme_activation_hook($code, $function) {  
    $optionKey="theme_is_activated_" . $code;
    if(!get_option($optionKey)) {
        call_user_func($function);
        update_option($optionKey , 1);
    }
}
于 2014-09-11T19:06:34.950 回答
3

也许问题可能是你在这个字符串中有额外的空间'after_setup_theme '
试试这样:

add_action( 'after_setup_theme', 'theme_image_size_setup' );
于 2012-12-03T13:56:38.327 回答
1

每次加载页面时都会运行after_setup_theme。所以它不是更好的解决方案。

于 2014-02-15T07:04:34.383 回答
0

在 WPMU 环境中使用 WP 3.9,有一个名为 switch_theme 的动作,它被称为你切换主题的一切。

调用此操作时,将传递以下 $_GET 参数:action=activate, stylesheet=

我在 mu-plugins/theme-activation-hook.php 中创建了一个新文件

add_action('switch_theme','rms_switch_theme');
function rms_switch_theme($new_name, $new_theme='') {
    if (isset($_GET['action']) && $_GET['action'] == 'activate') {
        if (isset($_GET['stylesheet']) && $_GET['stylesheet'] == 'rms') {
            // perform the theme switch processing,
            // I echo the globals and immediately exit as WP will do redirects 
            // and will not see any debugging output on the browser.
            echo '<pre>'; print_r($GLOBALS); echo '</pre>'; exit;
        }
    } 
}
于 2014-04-22T15:26:27.337 回答