{"id":4798,"date":"2015-03-15T22:23:07","date_gmt":"2015-03-15T21:23:07","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=4798"},"modified":"2015-03-15T22:25:29","modified_gmt":"2015-03-15T21:25:29","slug":"champs-personnalises-administration-commentaires","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/tutoriels\/champs-personnalises-administration-commentaires","title":{"rendered":"WordPress \u2013 Des champs perso dans l&rsquo;admin des commentaires"},"content":{"rendered":"<p>J&rsquo;en parlais d\u00e9j\u00e0 il y a 3 ans en arri\u00e8re, en expliquant <a href=\"https:\/\/www.creativejuiz.fr\/blog\/tutoriels\/wordpress-personnaliser-champs-formulaire-commentaire\">comment personnaliser les champs de formulaire de commentaire<\/a>, et je reviens sur le sujet car je me rends compte apr\u00e8s quelques commentaires de lecteurs que je n&rsquo;avais pas expliqu\u00e9 comment afficher ces informations dans l&rsquo;espace d&rsquo;administration. Voyons cela ensemble.<!--more--><\/p>\n<p>Si jamais vous n&rsquo;avez pas suivi l&rsquo;article de <a href=\"https:\/\/www.creativejuiz.fr\/blog\/tutoriels\/wordpress-personnaliser-champs-formulaire-commentaire\">personnalisation des champs de formulaire de commentaire<\/a>, je vous invite \u00e0 y aller, car ce pr\u00e9sent article est sa suite logique, m\u00eame s&rsquo;il peut \u00eatre compris sans cette pr\u00e9c\u00e9dente lecture.<\/p>\n<h2>Cr\u00e9er une metabox pour les commentaires<\/h2>\n<p>WordPress permet de cr\u00e9er des petites bo\u00eetes un peu partout dans l&rsquo;espace d&rsquo;administration gr\u00e2ce \u00e0 la fonction <code>add_meta_box<\/code>. Il suffit ensuite de d\u00e9terminer l&#8217;emplacement de cette bo\u00eete et son contenu. Commen\u00e7ons par cr\u00e9er la fonction qui va cr\u00e9er notre bo\u00eete.<\/p>\n<p>Comme d&rsquo;habitude ce petit bout de code se place dans le fichier <code>functions.php<\/code> de votre th\u00e8me, ou dans un plugin si vous vous sentez d&rsquo;attaque :p<\/p>\n<pre class=\"code\"><code class=\"language-php line-numbers\">&lt;?php\r\n\/\/ on check si la fonction n'existe pas\r\nif ( !function_exists('juiz_add_meta_boxes_in_comments') ) {\r\n\r\n\t\/\/ on cr\u00e9\u00e9 la fonction d'ajout de notre metabox\r\n\tfunction juiz_add_meta_boxes_in_comments() {\r\n\r\n\t\t\/\/ vive le codex : http:\/\/codex.wordpress.org\/Function_Reference\/add_meta_box\r\n\t\tadd_meta_box(\r\n\t\t\t'juiz_comment_extra_box',\r\n\t\t\t'Extra Informations',\r\n\t\t\t'juiz_metabox_for_comments',\r\n\t\t\t'comment',\r\n\t\t\t'normal'\r\n\t\t);\r\n\t}\r\n\r\n\t\/\/ on branche notre nouvelle box sur le bon hook\r\n\tadd_action( 'add_meta_boxes', 'juiz_add_meta_boxes_in_comments' );\r\n}\r\n?&gt;<\/code><\/pre>\n<p>Cette fonction seule ne peut pas fonctionner, il faut que nous cr\u00e9ions \u00e9galement la fonction <code>juiz_metabox_for_comments<\/code>, comme le pr\u00e9cise notre appel \u00e0 la fonction <code>add_meta_box<\/code> (ligne 12 du code pr\u00e9c\u00e9dent).<\/p>\n<h2>Le contenu de la metabox<\/h2>\n<p>C&rsquo;est cette fonction qui va cr\u00e9er le contenu de notre metabox. Pour ce contenu, je vais simplement copier le code HTML de la bo\u00eete des informations d&rsquo;un commentaire classique dans l&rsquo;admin de WordPress. Attention, c&rsquo;est du tableau :p<\/p>\n<pre class=\"code\"><code class=\"language-php line-numbers\">&lt;?php\r\n\/\/ on check si la fonction n'existe pas\r\nif ( !function_exists('juiz_metabox_for_comments')) {\r\n\r\n\t\/\/ on cr\u00e9\u00e9 la fonction de contenu de notre bo\u00eete\r\n\tfunction juiz_metabox_for_comments($comment) {\r\n\r\n\t\t\/\/ on r\u00e9cup\u00e8re nos donn\u00e9es personnalis\u00e9e\r\n\t\t\/\/ http:\/\/codex.wordpress.org\/Function_Reference\/get_comment_meta\r\n\t\t$my_meta_comment = get_comment_meta($comment-&gt;comment_ID, 'my_meta_comment', true);\r\n\r\n\t\t\/\/ On affiche notre tableau avec quelques donn\u00e9es\r\n\t\t\/\/ pr\u00e9d\u00e9finies, et notre donn\u00e9e perso\r\n\t\techo '&lt;table class=\"form-table editcomment\"&gt;\r\n\t\t\t&lt;tr&gt;\r\n\t\t\t\t&lt;td class=\"first\"&gt;&lt;label for=\"my_meta_comment\"&gt;My comment meta&lt;\/label&gt;&lt;\/td&gt;\r\n\t\t\t\t&lt;td&gt;&lt;input type=\"text\" id=\"my_meta_comment\" name=\"my_meta_comment\" value=\"'.$my_meta_comment.'\"&gt;&lt;\/td&gt;\r\n\t\t\t&lt;\/tr&gt;\r\n\t\t\t&lt;tr&gt;\r\n\t\t\t\t&lt;td class=\"first\"&gt;&lt;label for=\"juiz_user_id\"&gt;User ID&lt;\/label&gt;&lt;\/td&gt;\r\n\t\t\t\t&lt;td&gt;&lt;input type=\"text\" id=\"juiz_user_id\" name=\"juiz_user_id\" value=\"'.$comment-&gt;user_id.'\"&gt;&lt;\/td&gt;\r\n\t\t\t&lt;\/tr&gt;\r\n\t\t\t&lt;tr&gt;\r\n\t\t\t\t&lt;td class=\"first\"&gt;Article&lt;\/td&gt;\r\n\t\t\t\t&lt;td&gt;&lt;a href=\"'.get_the_permalink($comment-&gt;comment_post_ID).'\"&gt;'.get_the_title($comment-&gt;comment_post_ID).'&lt;\/a&gt; &lt;em&gt;(&lt;a href=\"'.get_edit_post_link($comment-&gt;comment_post_ID).'\"&gt;'.__('Edit').'&lt;\/a&gt;)&lt;\/em&gt;&lt;\/td&gt;\r\n\t\t\t&lt;\/tr&gt;\r\n\t\t\t&lt;tr&gt;\r\n\t\t\t\t&lt;td class=\"first\"&gt;User Agent&lt;\/td&gt;\r\n\t\t\t\t&lt;td&gt;'.$comment-&gt;comment_agent.'&lt;\/td&gt;\r\n\t\t\t&lt;\/tr&gt;\r\n\t\t&lt;\/table&gt;';\r\n\t}\r\n}\r\n?&gt;<\/code><\/pre>\n<p>Comme vous pouvez le voir, je r\u00e9cup\u00e8re quelques donn\u00e9es existantes par d\u00e9faut pour chaque commentaire, mais je r\u00e9cup\u00e8re \u00e9galement mon champ personnalis\u00e9 qui a pr\u00e9c\u00e9demment \u00e9t\u00e9 enregistr\u00e9 en tant que \u00ab\u00a0comment meta\u00a0\u00bb.<\/p>\n<p><a href=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2015\/03\/wp-comment-metabox.png\"><img decoding=\"async\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2015\/03\/wp-comment-metabox.png\" alt=\"Les champs ajout\u00e9s dans l&#039;espace d&#039;admin\" width=\"943\" height=\"462\" class=\"aligncenter size-full wp-image-4894\" srcset=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2015\/03\/wp-comment-metabox.png 943w, https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2015\/03\/wp-comment-metabox-300x147.png 300w, https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2015\/03\/wp-comment-metabox-600x294.png 600w\" sizes=\"(max-width: 943px) 100vw, 943px\" \/><\/a><\/p>\n<p>J&rsquo;affiche d&rsquo;ailleurs cette information dans un champ de formulaire, car je vais vous montrer comment permettre son \u00e9dition depuis l&rsquo;espace d&rsquo;administration.<\/p>\n<h2>Enregistrer les donn\u00e9es d&rsquo;une metabox<\/h2>\n<p>Metabox cr\u00e9\u00e9e, donn\u00e9es r\u00e9cup\u00e9r\u00e9es, maintenant il faut sauvegarder cette donn\u00e9e si un administrateur \u00e9dite le contenu d&rsquo;un commentaire (si jamais celui-ci est inappropri\u00e9 par exemple).<\/p>\n<p>Pour ce faire nous allons nous brancher sur le hook <code>comment_save_pre<\/code>. Je n&rsquo;en ai pas trouv\u00e9 d&rsquo;autre pour effectuer ce travail, mais je ne suis pas expert en c\u0153ur de WordPress. Peut-\u00eatre y en a-t-il un plus efficace. Celui-ci fait bien le travail toujours.<\/p>\n<pre class=\"code\"><code class=\"language-php line-numbers\">&lt;?php\r\n\/\/ on v\u00e9rifie que la fonction n'existe pas d\u00e9j\u00e0\r\nif ( !function_exists('juiz_save_comment_datas')) {\r\n\r\n\tfunction juiz_save_comment_datas($comment_content) {\r\n\r\n\t\t\/\/ on va utiliser les infos de la base de donn\u00e9es\r\n\t\t\/\/ http:\/\/codex.wordpress.org\/Class_Reference\/wpdb\r\n\t\tglobal $wpdb;\r\n\r\n\t\t$comment_ID = absint( $_POST['comment_ID'] );\r\n\r\n\t\t\/\/ si mon champ custom existe, je mets \u00e0 jour sa valeur\r\n\t\tif ( isset( $_POST['my_meta_comment'] ) ) {\r\n\t\t\t\/\/ je nettoie la donn\u00e9e avant...\r\n\t\t\t$my_meta_comment = sanitize_text_field( $_POST['my_meta_comment'] );\r\n\t\t\t\/\/ ... de la sauvegarder\r\n\t\t\tupdate_comment_meta( $comment_ID, 'my_meta_comment', $my_meta_comment );\r\n\t\t}\r\n\r\n\t\t\/\/ Technique extraite de wp_update_comment\r\n\t\t\/\/ Mise \u00e0 jour des donn\u00e9es existantes\r\n\t\tif ( isset( $_POST['juiz_user_id'] ) ) {\r\n\t\t\t\/\/ r\u00e9cup\u00e9ration de l'ID\r\n\t\t\t$user_id = absint($_POST['juiz_user_id']);\r\n\t\t\t$data = compact('user_id');\r\n\t\t\t\/\/ mise \u00e0 jour de la valeur de comment_ID\r\n\t\t\t$rval = $wpdb-&gt;update( $wpdb-&gt;comments, $data, compact( 'comment_ID' ) );\r\n\t\t}\r\n\r\n\t\t\/\/ on retourne $comment_content (n\u00e9cessaire pour ce hook)\r\n\t\treturn $comment_content;\r\n\t}\r\n\t\r\n\t\/\/ on ajout\u00e9 la fonction au hook comment_save_pre\r\n\tadd_filter('comment_save_pre', 'juiz_save_comment_datas' );\r\n}\r\n?&gt;<\/code><\/pre>\n<p>Beaucoup de commentaires mais peu de code au final \ud83d\ude42<br \/>\nJe ne sais pas pr\u00e9cis\u00e9ment pourquoi vous souhaiteriez pouvoir \u00e9diter l&rsquo;identifiant de l&rsquo;utilisateur qui a post\u00e9 ce commentaire, mais je donne l&rsquo;exemple surtout \u00e0 titre de d\u00e9monstration de la m\u00e9thode.<br \/>\nLa premi\u00e8re portion vous montre comment mettre \u00e0 jour votre donn\u00e9e personnalis\u00e9e, la seconde comment mettre \u00e0 jour une donn\u00e9e d\u00e9j\u00e0 existante pour un commentaire. Pour avoir la liste des donn\u00e9es existantes, je vous invite \u00e0 lire la page : <a href=\"http:\/\/codex.wordpress.org\/Function_Reference\/get_comment#Return\">Codex <code>get_comment<\/code><\/a><\/p>\n<p>Bon courage !<\/p>\n<div class=\"tdm\">\n<h2>Sommaire<\/h2>\n<ol>\n<li><a href=\"\/blog\/tutoriels\/wordpress-personnaliser-champs-formulaire-commentaire\">WordPress \u2013 Personnaliser les champs du formulaire de commentaire<\/a><\/li>\n<li><span class=\"current\">WordPress \u2013 Des champs personnalis\u00e9s dans l&rsquo;administration des commentaires<\/span><\/li>\n<\/ol>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;en parlais d\u00e9j\u00e0 il y a 3 ans en arri\u00e8re, en expliquant comment personnaliser les champs de formulaire de commentaire, et je reviens sur le sujet car je me rends compte apr\u00e8s quelques commentaires de lecteurs que je n&rsquo;avais pas expliqu\u00e9 comment afficher ces informations dans l&rsquo;espace d&rsquo;administration. Voyons cela ensemble.<\/p>\n","protected":false},"author":4,"featured_media":2473,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_bluesky_dont_syndicate":"","_bluesky_syndication_accounts":"","_bluesky_syndication_text":"","footnotes":""},"categories":[9,13],"tags":[611,443,434],"coauthors":[597],"class_list":["post-4798","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriels","category-wordpress","tag-champs-personnalises","tag-commentaire","tag-hook"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/4798","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/comments?post=4798"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/4798\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/2473"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=4798"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=4798"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=4798"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=4798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}