CreateIT
CreateIT
BLOG

Multisite – redirect from main site

WordPress
TAGS: WordPress

Multisite – redirect from main site

SHARE

Challenge:
WordPress multisite root url should redirect to a subsite
Solution:
add a wp action and wp_safe_redirect()

Multisite WordPress setup allows to create a multilanguage website. You can set up CMS to have a language version path as a subdirectory, ex: mysite.com/de/ , mysite.com/en/ . But what will happen when trying to access a root site url mysite.com? The main blog multisite homepage will be displayed. We can use the main site as a default landing page / language switcher, or even use it as a separate language version. Another solution will be to redirect every request from the main blog → to the homepage of the sub-site.

Redirect from the main blog

Our multisite uses sub-directories configuration. Every language sub-blog uses 2 letter code as a root path. We decided to redirect traffic from the main blog to the EN version (blog_id = 2). That way, if somebody types a url of a raw domain, he will be redirected to the sub-blog.

// functions.php
// redirection for: mysite.com → mysite.com/en/
function redirect_from_main_blog()
{
    $blog_id = get_current_blog_id();
    if (is_home() || is_404()):
        if ($blog_id == 1 && !is_admin() && !defined('WP_CLI')) {
            $url = get_home_url(2); //redirect to EN site from base url
            echo $url;
            wp_safe_redirect($url, 301);
            exit;
        }
    endif;
}
add_action('wp', 'redirect_from_main_blog');

Request Params conflicts

Sometimes the main site root url is used by external integrations, like the Pardot Form. On form submission, the site redirects to the main url with response params added to the request. If wp_safe_redirect() is executed, we will lose data from the response. The solution will be to check if param is set and add a code exception.

function redirect_from_main_blog() {
    $blog_id = get_current_blog_id();
    if(isset($_POST['ct_success_url'])){
        // pardot success redirection fix (HTTP_REFERER)
        return false;
    }
    if(isset($_GET['errorMessage'])){
        // pardot errorMsg redirection fix
        return false;
    }
  (...)
}

That’s it for today’s tutorial. Make sure to follow us for more useful tips and guidelines.

Need help?

  • Looking for support from experienced programmers?

  • Need to fix a bug in the code?

  • Want to customize your webste/application?

ADD COMMENT

Your email address will not be published. Required fields are marked *

createIT Contact