Matthijn
Matthijn

Reputation: 3234

Switching theme through code Wordpress

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

Answers (2)

T.Todua
T.Todua

Reputation: 56381

NO!

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

brasofilo
brasofilo

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

Related Questions