5
votes

The WordPress reading settings can be found under Settings > Reading.

I have the WordPress 'Front page displays' option set to 'Static front page'.

My 'Front page' is set to 'About'.

I am trying to have a different front page for logged out and logged in users. Currently everyone views the 'About' page when they visit example.com.

  • If I visit example.com when logged out I want to see my 'about page'
  • If I visit example.com when logged in I want to see my 'contact page'

Does anybody know how I can achieve this?

5
You can either make a redirect to a page if not logged in or just show different content on the base url, which would you prefer?Nick M
Hi Nick M. I'd prefer to show different content on the base URL.henrywright
I have tried using if ( is_front_page() && is_user_logged_in() ) and then trying to display a template that isn't the front page template but this didn't quite workhenrywright
Update your answer to show us your code. This should work.Nick M
Nick M - the code I used did identify when the front page was being viewed by a logged in user but it didn't set the WordPress 'front page' - which is what I'm trying to dohenrywright

5 Answers

4
votes

It's possible to set the front page programmatically but not sure if this is a solution to your question, so, paste this code in your functions.php file and give it a try

if( is_user_logged_in() ) {
    $page = get_page_by_title( 'Contact Me');
    update_option( 'page_on_front', $page->ID );
    update_option( 'show_on_front', 'page' );
}
else {
    $page = get_page_by_title( 'About Me' );
    update_option( 'page_on_front', $page->ID );
    update_option( 'show_on_front', 'page' );
}

P/S: Not tested, just try it and please response what you get.

3
votes

For anyone else that has this problem you could just add this to the header.php, at the very top before the <!DOCTYPE html>:

<?php if(is_front_page()) {
    if (is_user_logged_in()) {
        $newURL = 'http://YourWebsiteURLhere.com';
        header('Location: '.$newURL);
    }
} ?>

OR you can add this to Functions:

function homepage_template_redirect()
{
    if( is_front_page() && is_user_logged_in() )
    {
        wp_redirect(get_page_link('contact'));
        exit();
    }
}
add_action( 'template_redirect', 'homepage_template_redirect' );
2
votes

In the body of your page-about.php (or which ever template file the About page is using) you just need to use a conditional statement.

<?php if( is_user_logged_in() ) { ?>


content for logged in users


<?php } else { ?>


content for non logged in users


<?php } ?>
0
votes
  • Edit: Didn't see your comment before I posted my answer.

You could add this to your functions.php

add_action('init', 'my_redirector');

function my_redirector(){
    if( !is_user_logged_in() ) {
        wp_redirect( 'http://www.example.com/contact_us'); 
        exit;
    }
}

It's not a great solution to hard code in your url, but you could pick up the URL in other ways.

0
votes

UserPro plugin gets this done easily. Just enter the URL you want logged in users to see instead of the normal homepage. So Simple!