Programmatically Selecting Theme Based on URL

The activated theme is stored in the options table: template is the parent theme, stylesheet is the child theme. If there is no child theme the two values will be the same.

The current hostname (URL without protocol or path) is available in the $_SERVER variable.

You can then hook into the stylesheet and template filters to force a different theme.

function use_mobile_theme( $current_theme ) {
    // If the domain is m.qqq.com and the current theme is 'qqq'
    if ( 'm.qqq.com' === $_SERVER['HTTP_HOST'] && 'qqq' === $current_theme ) {
        // Use the 'qqq-mobile' theme instead
        return 'qqq-mobile';
    } else {
        // Otherwise, keep the current theme
        return $current_theme;
    }
}

add_filter( 'stylesheet', 'use_mobile_theme' );
add_filter( 'template', 'use_mobile_theme' );

If qqq-mobile is a child theme, remove the add_filter( 'template', ... line.

Leave a Comment