Reputation: 3234
Is it possible to switch the Wordpress theme programmaticly? For example when there is a certain browser (found a plugin to detect that) that another theme is used?
I want to be able to give outdated browsers (IE7 and lower, lower than Saf and FF 3 e.d.) and mobile browsers a different theme than the other browsers.
I found the method switch_theme however that does not do the thing I expect (I get an blank error when I call this in functions.php) like
switch_theme('twentyten', 'stylesheet');
Or am I using this method wrong?
Upvotes: 4
Views: 4034
Reputation: 56381
switch_theme
globally switches the theme for whole website/visitors!
Here are plugins, which allows you to preview/switch theme temporarily for current session (to preview their websites with the different themes):
https://wordpress.stackexchange.com/questions/161187/activate-different-theme-for-temporary-preview
You can just modify the code of one of them, and add MOBILE detection codes in the login.
Upvotes: -1
Reputation: 26065
Had you searched WordPress StackExchange, you would have found this:
add_filter( 'template', 'wpse_49223_change_theme' );
add_filter( 'option_template', 'wpse_49223_change_theme' );
add_filter( 'option_stylesheet', 'wpse_49223_change_theme' );
function wpse_49223_change_theme($theme)
{
if ( wp_is_mobile() )
$theme = 'twentyten';
return $theme;
}
wp_is_mobile
is a built-in WordPress function, reproduced bellow:
function wp_is_mobile() {
static $is_mobile;
if ( isset($is_mobile) )
return $is_mobile;
if ( empty($_SERVER['HTTP_USER_AGENT']) ) {
$is_mobile = false;
} elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false // many mobile devices (all iPhone, iPad, etc.)
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== false ) {
$is_mobile = true;
} else {
$is_mobile = false;
}
return $is_mobile;
}
Upvotes: 3