• Kim

    (@pixelovely)


    Hi there,

    Is it possible to allow a custom user role to have an author page, visible at /author/nicename (with pretty permalinks on, of course), even if the user role is not allowed to publish posts?

    We had built a WP website with memberships sold through Woocommerce. One of the benefits of membership was having a public member page (actually just an author page.) This worked up until a few months ago, when users with the Woocommerce “customer” role were suddenly not allowed to have an author page. Woocommerce has explained that they no longer give author page permissions to people with the customer role, but has offered no clues as to how I go about granting this permission to someone.

    I have googled this issue extensively and just keep finding discussions about how to get the author’s blog posts to show up on their author page. These people will have no blog posts. They just need a page.

    At present, everyone with the “customer” role has their author page redirected to the 404 template.

Viewing 6 replies - 1 through 6 (of 6 total)
  • I think you are on the correct track with author page. So my approach would be to set up an author page as per the instructions here https://codex.www.ads-software.com/Author_Templates. And then in your custom author template check to see if the author has the customer roles set

    if( in_array( 'customer', $user->roles ) ) {
        //show the author information
    } else {
      echo 'That author is not known.'//or other suitable message
    }

    You can display a unique author template using the username or the id based on naming conventions in the template hierarchy. If you got creative with PHP code you could read the user type and display a specific author template based on user role.

    https://developer.www.ads-software.com/themes/basics/template-hierarchy/

    https://codex.www.ads-software.com/Author_Templates

    Here is a quick example of getting the user role in php (This only works if each user is assigned a single role) :

    $user_obj = get_userdata( $user_id );
    echo $user_obj->roles[0];
    Thread Starter Kim

    (@pixelovely)

    We have a template. The problem is that as of late, the author page link is redirected to a 404 error if the author being looked at isn’t an administrator.

    1. Please can you add an actual example of a url for an author.
    2. What is the author template called that you have?
    3. Is there any conditional code in the template file?

    Got this exact same issue.

    My author template has no conditional code based on roles, it just gets user data.

    But like PIXELovely explained in newer WooCommerce versions it seems that user with an customer role somehow can’t have an author page…

    Cant find much info on Google either. Strange.

    So in WooCommerce, this is achieved by the following code in wp-content/plugins/woocommerce/includes/wc-user-functions.php:

    /**
     * Disable author archives for customers.
     *
     * @since 2.5.0
     */
    function wc_disable_author_archives_for_customers() {
    	global $wp_query, $author;
    
    	if ( is_author() ) {
    		$user = get_user_by( 'id', $author );
    
    		if ( isset( $user->roles[0] ) && 'customer' === $user->roles[0] ) {
    			wp_redirect( wc_get_page_permalink( 'shop' ) );
    		}
    	}
    }
    
    add_action( 'template_redirect', 'wc_disable_author_archives_for_customers' );

    In your theme’s functions.php (or somewhere else appropriate), you could turn that off:

    /* This removes the function that redirects customers to the shop page'
    function enable_author_archives_for_customers() {
      remove_action('template_redirect', 'wc_disable_author_archives_for_customers');
    }
    add_action( 'after_setup_theme', 'enable_author_archives_for_customers' );

    Hope this helps,

    Dan

Viewing 6 replies - 1 through 6 (of 6 total)
  • The topic ‘How to add author page to custom user role?’ is closed to new replies.