I know the many tricks to see if said theme is activated, I have scoured the internet. I am not looking for re-pasting of that code. What I am looking for though is weather or not 3.3-3.5 released a new function that does something upon theme_init, I saw some sort of hook, but I can’t remember where, in the codex, dealing with doing things after a theme has been initialized..
Any one know?
You might be looking for the
after_setup_theme
hook:http://codex.wordpress.org/Plugin_API/Action_Reference/after_setup_theme
For anyone stumbling upon this question; there is an action you can hook into (added 3.3.0) which is fired only on activation of a new theme:
after_switch_theme
http://codex.wordpress.org/Plugin_API/Action_Reference/after_switch_theme
To do something on deactivation of a theme you can use the sister action: switch_theme
With the theme preview features it is unlikely that there will ever be a theme activation hook since themes need to work even without being “activated”.
After trying @sleepingkiwi method i encountered a problem. A client might try a different theme (even if just for a moment), this might create a problem due to the fact that the “on theme activation” hook we created ran twice.
The best method is using after_switch_theme in concert with WordPress “update_option” to save and later check an activation noticethus making this method bullet proof.
Example:
Hope this helps.
The action hook after_switch_theme sometimes may fail because it fires only if the old theme still exists. This is written in the codex.
You can also check it directly in wp-includes/theme.php in the function check_theme_switched() where the action hook is added. You will see that the action hook “after_switch_theme” is inside the condition if ( $old_theme->exists() ) {….}
If you want to be sure the hook fires every time a theme is activated, and no matter if the old theme still exists, you can create your custom hook by hooking the change of the option “stylesheet”.
Every time a theme is activated that option stores the name of the new active theme. So:
Then you can use your action hook “my_after_theme_activation” or whatever you want to call it.
This method is not perfect because a plugin could also update the option “stylesheet” without a real theme activation. I don’t see why they should do it, but it’s allowed, and you never know. So, I would take that into account.
Use it if for you it’s not a problem that it fires also if a new theme is not really activated, but one of the plugins just changed the option “stylesheet”.
You could also directly hook the change of the option “theme_switched” instead of “stylesheet”. Not tested this, but looking at the code it looks like it fires two times when you activate a new theme. The first time to save the old theme stylesheet, and a second time to save the value “false”.