web-dev-qa-db-fra.com

Ajouter un lien à la barre d'administration pour modifier l'auteur

J'essaie de permettre à mes rédacteurs et administrateurs de cliquer sur "Modifier l'auteur" comme ils le feraient "Modifier le message" ou "Modifier le type de message personnalisé" dans la barre d'administration lorsqu'ils se trouvent sur une page telle que/authors/jdoe.

(Remarque: je fais $wp_rewrite->author_base = 'people' pour que mes adresses soient/people/jdoe ... je ne suis pas sûr que cela crée des problèmes potentiels.)

J'ai essayé de faire cela à travers des fonctions, mais j'ai lu plus tard que functions.php était traité trop tôt pour obtenir le modèle actuel, les variables ou les ID du contenu de la page.

function add_author_edit_link( $wp_admin_bar ) {
if ( is_page_template('author.php') ) {
  $args = array(
    'id' => 'author-edit',
    'title' => __( 'Edit Person' ),
    'href' => '/wp-admin/user-edit.php?user_id=' . $user->ID
  );
$wp_admin_bar->add_node($args);
  } // if is_page_template author
}
add_action( 'admin_bar_menu', 'add_author_edit_link', 500 );

Je ne sais pas comment aborder cela, mais j'apprécierai toute pensée.

Je suppose que je pourrais essayer de l'insérer dans le contenu de la page pour certains rôles uniquement, mais n'y a-t-il pas de moyen plus facile d'ajouter quelque chose de similaire dans la barre d'administration?

3
rktl-c

Vous pouvez essayer cette modification de votre code:

function add_author_edit_link( $wp_admin_bar )
{
    if ( is_author() && current_user_can( 'add_users' ) )
    {
        $args = array(
           'id'    => 'author-edit',
           'title' => __( 'Edit Author' ),
           'href'  => admin_url( sprintf( 
               'user-edit.php?user_id=%d',
               get_queried_object_id() 
           ) )
        );
        $wp_admin_bar->add_node($args);
  } 
}

add_action( 'admin_bar_menu', 'add_author_edit_link', 99 );

où nous utilisons la fonction get_queried_object_id() pour obtenir l'identifiant de l'auteur.

Notez que vous pouvez utiliser admin_url() pour obtenir l’url du serveur.

J'utilise is_author() ici au lieu de is_page_template( 'author.php' ).

Ce lien Modifier l'auteur peut ne pas être pertinent pour les utilisateurs qui ne peuvent pas modifier d'autres utilisateurs. J'ai donc ajouté la vérification current_user_can( 'add_users' ). Je ne pouvais pas trouver la capacité edit_users, alors j'ai utilisé add_users à la place.

2
birgire

Vous pourriez essayer ceci:

function add_author_edit_link( $wp_admin_bar ) {
    if ( is_author() && current_user_can( 'add_users' )) {
        $currentUserID = get_current_user_id();
        $args = array(
            'id' => 'author-edit',
            'title' => __( 'Edit Person' ),
            'href' => '/wp-admin/user-edit.php?user_id=' . $currentUserID
        );
        $wp_admin_bar->add_node($args);
    }
}
add_action( 'admin_bar_menu', 'add_author_edit_link', 500 );
1
Ariful Islam