it-swarm.com.de

Verstecke die Author.php-Vorlage vor einer bestimmten Benutzerrolle

  1. Ich habe eine author.php-Vorlage, die ein Benutzerprofil formatiert (benutzerdefinierte Rolle: Agenten usw.)

  2. Ich habe ein Blog und Redakteure und Mitwirkende können Artikel posten.

Problem

Wenn ein Betrachter im Blog auf einen Autorenlink klickt, um die Seite "Autorenarchiv" anzuzeigen, wird als Seite die Vorlage "Author.php" geladen. Diese Vorlage zeigt Details zum Agentenprofil und keine Artikel an. Diese author.php-Vorlage hat nichts mit Editoren und Mitwirkenden zu tun.

Lösung?

Wie kann ich Editor & Contributor vom Laden dieser author.php-Datei ausschließen? Wenn ein Benutzer den Link des Blogpost-Autors besucht, gelangt er auf diese Weise zur Seite des Autorenarchivs, die auf der benutzerdefinierten Vorlage des Agenten author.php installiert ist

Hoffe das ist klar genug, Danke für die Hilfe!

1
Missiona

Mit dem Hook template_include können Sie ändern, welche Vorlagendatei verwendet werden soll.

Darin können Sie unter bestimmten Bedingungen prüfen, ob eine Autorenseite angefordert wurde, und dann mit get_query_var() den angeforderten Autor ermitteln. Anschließend überprüfen Sie die Autorenrolle und prüfen, ob Sie eine andere Vorlage verwenden möchten.

Unten ist ungetestet, aber so ähnlich:

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