wordpressroles

Redirect to URL if the user isnt the author of the post


I am looking for a way to redirect when viewing any publication, except the author of the publication.

There are two roles in the "author" and "custom_role" site. This last role is allowed to see all. the role of author can only see his own, the rest redirects. I've tried for a while, in this last code I'm working but it does not work and I do not know why

Thanks very much!

add_action( 'pre_get_posts', function() {
if( is_author() )
{
    if( ! is_user_logged_in() )
    {
        wp_redirect( 'https://aaa.com/custom' );
        exit;
    }

    $author = get_queried_object();

    if( $author->ID != get_current_user_id() )
    {
        wp_redirect( get_author_posts_url( 
 get_current_user_id() ) );
        exit;
    }

}
} );

Solution

  • First of all, is_author() is used to check if current page is author archive page. Please check following example. This may not be the exact anster but it may help. In the single post, post author and current user ID is compared. If they are not same then it is redirected to home page. If those IDs are same then, current user is also the post author, so current user will be allowed to view page.

    add_action( 'get_header', 'wpso_author_redirection' );
    
    function wpso_author_redirection() {
        if ( is_singular() ) {
            $current_post_details = get_post( get_the_ID(), ARRAY_A );
            $user_id = get_current_user_id();
            if ( $user_id !== absint( $current_post_details['post_author'] ) ) {
                wp_redirect( home_url() );
            }
        }
    }