This is a weird one - this exact code works with after_setup_theme but not with after_switch_theme. Of course I would rather use after_switch_theme because after_setup_theme runs all the time - but it just will not work.

add_action( 'after_setup_theme', 'wpdocs_theme_setup' );

function wpdocs_theme_setup() {
    add_theme_support( 'post-thumbnails' );

    add_image_size( 'hero_image', 1920, 800, true);
    add_image_size( 'hero_image_md_lg', 991, 490, true);
    add_image_size( 'hero_image_md', 767, 460, true);
    add_image_size( 'hero_image_sm', 549, 575, true);

For reference: yes, I am switching the theme. Yes, I am regenerating the thumbnails. And in my wpdocs_theme_setup function I'm also adding custom roles that work regardless of which hook is being used. Any thoughts?


The reason adding custom roles works on after_switch_theme is because roles are saved in the database. In fact, because it saves to the database, it should not run on after_setup_theme.

add_image_size(), on the other hand, does not save anything to the database, so needs to run on every page load, and needs to be hooked on a hook that runs for every page load. So after_setup_theme is the correct hook to use.

  • Ohhhh I thought it was setting up custom image sizes that would be stored as a setting somewhere in the database. Got it, thanks. – rickibarnes Mar 26 '19 at 3:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.