link-zelda-wordpress

En tant qu’administrateur de votre site WordPress, il n’est pas rare d’avoir besoin de modifier rapidement un contenu. Avec la barre d’outils, la tâche est facile mais si comme moi vous ne l’affichez pas alors un bouton d’accès rapide à l’éditeur du back-office nous simplifiera la tâche. Bien entendu, le lien sera visible des seuls utilisateurs autorisés par leur rôle.Nous allons insérer ce bouton dans les fichiers du thème qui servent à afficher les articles et les pages. A vous de faire de même pour vos différents types de contenu ou vos modèles de pages.

Tout d’abord, ouvrez le fichier single.php à l’aide d’un éditeur de texte en utilisant un client FTP comme FileZilla. Pour ma part, j’utilise Coda sous MacOS X qui combine à la fois un éditeur de code et un client FTP.

Repérez la fonction the_content() qui affiche votre contenu. Le plus simple est de placer le bout de code suivant juste après celle-ci de sorte que le lien d’édition s’affiche en fin d’article :

<?php if( current_user_can ('manage_options')) { ?>
<a href="<?php echo get_edit_post_link(); ?>"><?php _e("Edit post","ntp_framework"); ?></a>
<?php } ?>

Sauvegardez le fichier puis faites de même pour page.php et les autres fichiers si nécessaire.

Remarquez la condition à la première ligne indiquant que seuls les utilisateurs disposant de capacité manage_options – autrement dit, un rang administrateur, verront ce lien d’édition. Dans le cas d’un site multi-utilisateurs, il serait pertinent d’indiquer une capacité moins contraignante pour donner l’accès aux éditeurs, auteurs ou autres contributeurs. A vous de voir en indiquant celle d’un rang inférieur grâce au codex.

Les plus avertis d’entre nous iront jusqu’à modifier la classe CSS du lien en spécifiant – s’ils en disposent, les classes de Twitter Bootstrap.

Crédits photo : Dave Hill

13 commentaires

  1. Hellow !

    Désolé d’avance,
    Je viens casser l’ambiance.
    Non pas que ce n’est pas bon,
    Mais un truc ne tourne pas rond.
    Je me permets de corriger,
    pour que les gens puissent en profiter.
    A bientôt,
    mon salaud. (oui j’ai rien trouvé là)

    Alors euh, pourquoi faudrait-il être administrateur pour modifier un article ? L’admin étant là pour « administrer » et les éditeurs, auteurs et contributeurs pour ajouter du contenu. Ici, un auteur n’aurait pas ton lien alors qu’il a les droits ! Pas logique. Il faut utiliser la bonne capacité : « edit_post » suivi de l’ID du post :
    if( current_user_can( 'edit_post', get_the_ID() ) ) ...

    Deuxième chose, tu utilises une traduction maison alors que WordPress a déjà la sienne qui est « Edit this ». Inutile de recréer un .po pour 2 mots.
    _e( 'Edit this' ); // suffisant

    Finalement tout ceci est inutile car la fonction « edit_post_link() » fait déjà tout elle vérifie les droits, elle affiche le code HTML elle même.
    edit_post_link();

    Et enfin, ne modifiez pas votre thème ! Il y a de fortes chances que vous utilisiez un thème parent et non enfant, possible que ce soit un premium. Si vous modifiez le thème parent, vous ne pourrez plus mettre à jour sous peine de perdre ces modifs, il faut plutôt utiliser un hook, résumé du code en 1 ligne :
    add_filter( 'the_content', 'edit_post_link', 0 );
    Si vous voulez le lien SOUS le contenu, augmentez alors la priorité, ici 0 = en premier (donc avant le contenu).

    Bisou !

    ps : oui je sais tu dis qu’on peut changer la capacité, mais en multisite ou pas ! Aucun rapport le MS ici. Il faut de suite donner la bonne capa !
    ps2 : si vous postez des article avec votre compte admin, vous avez un soucis de sécurité, bonne nuit

    1. Casseur d’ambiance, je te balance en blacklist de mon plugin d’anti-spam !

      1/ Il y a des cas où le bouton d’édition ne doit pas forcément être disponible pour tous en front même si un utilisateur auteur pourrait l’utiliser…

      2/ OK pour la traduction maison. En effet, tu économises mais bien souvent j’aime avoir mon texte à moi par exemple en fonction du type de contenu.

      3/ Je fais un get_edit_post_link car j’ai besoin de l’URL dans mon lien si je veux lui appliquer une classe CSS. Donc davantage personnalisable.

      Oui les 2 vérifient déjà les droits mais on peux avoir des cas particuliers comme au point 1/

      4/ OK mister Hook pour le résumé en une ligne. Cependant, est-ce facilement customisable notamment avec mes classes issues de Twitter Bootstrap ?

      En tout cas, merci de ton commentaire constructif qui permettra à ceux qui liront d’apprendre plus de choses que le tutoriel !

      1. Bien sûr que tu peux ajouter ta classe, il y a le hook « edit_post_link », tu ajoutes alors un filter comme par exemple :

        add_filter( 'edit_post_link', 'ajouter_une_classe_css_pour_aurelien_lol' );
        function ajouter_une_classe_css_pour_aurelien_lol( $link ) {
          if( strpos( $link, 'class="' )>0 ) {
            return str_replace( 'class="', 'class="myclass ', $link );
          }else{
            return str_replace( '<a ', '<a class="myclass" ', $link );
          }
        }

        La fonction gère le cas où un autre plugin/astuce aurait aussi déjà ajouté une classe.

        1. Par contre, là où mon code reprend du sens c’est pour le choix de l’affichage du bouton ou non. Car avec des conditions tu vas vite alourdir.

          Et encore un truc que j’ai pas géré dans mon CSS… les dépassements de commentaires sur la droite ! :p

          1. Il faudrait faire le test de perf, mais je ne préfère pas toucher au thème, et avec WP Rocket, personne ne subit le traitement, alors je préfère la flexibilité :p

Laisser un commentaire