web-dev-qa-db-fra.com

Afficher le rôle d'auteur dans l'archive ou la page d'auteur

Je souhaite afficher le rôle de l'auteur sur l'archive et la page de l'auteur en dehors de la boucle. J'ai trouvé ce code sur le débordement de la pile et cela fonctionne correctement dans la boucle.

function get_author_role()
{
    global $authordata;

    $author_roles = $authordata->roles;
    $author_role = array_shift($author_roles);

    return $author_role;
}

Dans le modèle utilisant le code ci-dessous

echo get_author_role()

Mais quand j'ajoute ceci à la page d'archive et d'auteur, c'est un message d'avertissement appelé

Warning: array_shift() expects parameter 1 to be array, null given in

Comment résoudre ceci?

2
pixelngrain

$authordata n'est pas disponible avant la création du premier message (avant la première the_post();).

Mais toutes les données dont vous avez besoin sont déjà présentes sur une archive d'auteur: dans get_queried_object() .

C'est un WP_User Object sur l'archive de l'auteur.

print '<pre>' . htmlspecialchars( print_r( get_queried_object(), TRUE ) ) . '</pre>';

Résultat:

WP_User Object
(
    [data] => stdClass Object
        (
            [ID] => 2
            [user_login] => toscho
            [user_pass] => $P$BO6.B4TIhxnKspIlxXHJCqa.M4I3v01
            [user_nicename] => toscho
            [user_email] => [email protected]
            [user_url] => 
            [user_registered] => 2011-12-25 15:20:12
            [user_activation_key] => 
            [user_status] => 0
            [display_name] => toscho
        )

    [ID] => 2
    [caps] => Array
        (
            [author] => 1
        )

    [cap_key] => test_capabilities
    [roles] => Array
        (
            [0] => author
        )

    [allcaps] => Array
        (
            [upload_files] => 1
            [edit_posts] => 1
            [edit_published_posts] => 1
            [publish_posts] => 1
            [read] => 1
            [level_2] => 1
            [level_1] => 1
            [level_0] => 1
            [delete_posts] => 1
            [delete_published_posts] => 1
            [author] => 1
        )

    [filter] => 
)

Ceci imprimera donc le premier rôle de l’auteur actuel:

! empty ( get_queried_object()->roles )
    and print ucfirst( get_queried_object()->roles[0] );
1
fuxia