web-dev-qa-db-fra.com

Masquer le modèle Author.php d'un rôle d'utilisateur spécifique

  1. J'ai un modèle author.php qui donne un style à un profil utilisateur (rôle personnalisé: agents, etc.)

  2. J'ai un blog et les rédacteurs et collaborateurs peuvent publier des articles.

Problème

Lorsqu'un utilisateur sur le blog clique sur un lien d'auteur pour afficher la page Archive de l'auteur, la page chargée est le modèle Author.php. Ce modèle affiche les détails du profil de l'agent et aucun article. Ce modèle author.php n'a rien à voir avec Editors & Contributors.

Solution?

Comment puis-je exclure Editor & Contributor du chargement de ce fichier author.php? Ainsi, lorsqu'un utilisateur visite le lien des auteurs de publication de blog, il est dirigé vers la page Archive de l'auteur au lieu du modèle personnalisé author author.php.

J'espère que c'est assez clair, merci pour l'aide!

1
Missiona

Le hook template_include vous permet de changer le fichier de modèle à utiliser.

Dans celui-ci, vous pouvez vérifier de manière conditionnelle s'il s'agit d'une page d'auteur demandée, puis utilisez get_query_var() pour obtenir l'auteur demandé. Vous vérifiez ensuite le rôle de l'auteur et voyez si c'est ce que vous ne voulez pas, et utilisez un autre modèle, le cas échéant.

Ci-dessous est non testé, mais quelque chose comme:

add_filter( 'template_include', 'myplugin_author_redirect', 99 );

function myplugin_author_redirect( $template ) {

    if ( is_author() ) { // When any Author page is being displayed

        // get the user page being requested
        $user = get_user_by('slug', get_query_var('author_name'));
        $user_role = array_shift($user->roles);

        // user roles we want to redirect away
        $exempt = array('editor', 'contributor');
        if ( in_array($user_role,$exempt,true) ) {
            // wtv file you want to load when an editors or contributor author page is requested
            return locate_template( array( 'archive.php' ) );
        }
    }
    return $template;
}
3
David Sword