{"id":2059,"date":"2012-05-02T08:56:53","date_gmt":"2012-05-02T06:56:53","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=2059"},"modified":"2015-03-15T22:23:22","modified_gmt":"2015-03-15T21:23:22","slug":"wordpress-personnaliser-champs-formulaire-commentaire","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/tutoriels\/wordpress-personnaliser-champs-formulaire-commentaire","title":{"rendered":"WordPress &#8211; personnaliser les champs du formulaire de commentaire"},"content":{"rendered":"<p>WordPress poss\u00e8de un formulaire de commentaire adapt\u00e9 \u00e0 la plupart des blogs. Cependant, comment s&rsquo;y prendre si vous souhaitez ajouter ou supprimer des champs et personnaliser l&rsquo;affichage des commentaires ?<!--more--><\/p>\n<p>WordPress pr\u00e9voit la possibilit\u00e9 de personnaliser le formulaire de commentaire gr\u00e2ce \u00e0 la fonction <code><a href=\"http:\/\/codex.wordpress.org\/Function_Reference\/comment_form\">comment_form( $args, $post_id )<\/a><\/code>, cette fonction est int\u00e9ressante mais quelque peu limit\u00e9e. Nous allons plut\u00f4t aborder quelques crochets (hooks) s&rsquo;y rapprochant.<\/p>\n<p>Concr\u00e8tement, il faut proc\u00e9der en trois \u00e9tapes :<\/p>\n<ul>\n<li>ins\u00e9rer ou supprimer un champ dans le formulaire<\/li>\n<li>permettre l&rsquo;insertion des donn\u00e9es renseign\u00e9es dans la base de donn\u00e9es<\/li>\n<li>afficher les nouvelles donn\u00e9es dans les commentaires<\/li>\n<\/ul>\n<p>Je vous invite \u00e0 \u00e9diter votre fichier <code>functions.php<\/code> pour effectuer des tests avec les codes que je vais fournir.<br \/>\nAllez, c&rsquo;parti !<\/p>\n<h2>Ins\u00e9rer et supprimer des champs dans le formulaire de commentaire<\/h2>\n<p>Cette premi\u00e8re \u00e9tape va utiliser le hook <code>comment_form_defaults<\/code> et se pr\u00e9sente sous la forme d&rsquo;une manipulation de tableau PHP.<br \/>\nLes champs sont enregistr\u00e9s dans l&rsquo;entr\u00e9e \u00ab\u00a0fields\u00a0\u00bb du tableau et peuvent \u00eatre manipul\u00e9s assez simplement. Ils contiennent du code HTML que nous allons reproduire pour nos champs personnalis\u00e9s.<\/p>\n<pre class=\"code\"><code class=\"language-php\">add_filter( 'comment_form_defaults', 'juiz_manage_default_fields');\r\n&nbsp;\r\n\/\/ $default contient tous les messages du formulaire de commentaire\r\n\/\/ il contient \u00e9galement \"comment_field\", le textarea du message\r\n&nbsp;\r\nif ( !function_exists('juiz_manage_default_fields')) {\r\n   function juiz_manage_default_fields( $default ) {\r\n&nbsp;\r\n      \/\/ R\u00e9cup\u00e9ration des infos connues sur le visiteur\r\n      \/\/ Permet de pr\u00e9-remplir nos nouveaux champs\r\n&nbsp;\t\r\n      $commenter = wp_get_current_commenter();\r\n&nbsp;\r\n      \/\/ Suppression d'un champ par d\u00e9faut parmi : author, email, url\r\n&nbsp;\t\r\n      unset ( $default['fields']['url'] );\r\n&nbsp;\t\r\n      \/\/ Ajout des champs dans le tableau \"fields\"\r\n      \/\/ $commenter[] contient les infos sur le visiteur\r\n&nbsp;\t\r\n      $default['fields']['job'] = '&lt;p class=\"comment-form-author-job comment-form-author\"&gt;\r\n      &lt;label for=\"job\"&gt;'. __('Your job') . '&lt;\/label&gt;\r\n      &lt;span class=\"required\"&gt;*&lt;\/span&gt;\r\n      &lt;input id=\"job\" name=\"job\" value=\"'.$commenter['comment_author_job'].'\" aria-required=\"true\" size=\"30\" type=\"text\" \/&gt;\r\n      &lt;\/p&gt;';\r\n&nbsp;\t\r\n      $sel_female = $sel_male = '';\r\n      if ( $commenter['comment_author_gender'] != '') ${'sel_'.$commenter['comment_author_gender']} = ' checked=\"checked\"';\r\n&nbsp;\t\r\n      $default['fields']['gender'] = '&lt;p class=\"comment-form-author-gender\"&gt;\r\n      &lt;span class=\"label_like\"&gt;'. __('Your gender') . '&lt;\/span&gt;\r\n      &lt;label for=\"female\"&gt;F&lt;\/label&gt; &lt;input '. $sel_female .' id=\"female\" name=\"gender\" value=\"female\" type=\"radio\" \/&gt;\r\n      &lt;label for=\"male\"&gt;M&lt;\/label&gt; &lt;input '. $sel_male .' id=\"male\" name=\"gender\" value=\"male\" type=\"radio\" \/&gt;\r\n      &lt;\/p&gt;';\r\n&nbsp;\t\r\n      \/\/ On retourne le tableau des champs\r\n&nbsp;\t\r\n      return $default;\r\n   }\r\n}<\/code><\/pre>\n<p>Quelques explications s&rsquo;imposent :<br \/>\nConcernant le HTML produit, je copie et adapte la structure par d\u00e9faut de mon th\u00e8me sur les champs de formulaire (ici TwentyEleven) dans le but de limiter les modifications futures sur la CSS (d&rsquo;o\u00f9 la copie de la classe <code>comment-form-author<\/code> sur <code>comment-form-author-job<\/code>).<\/p>\n<p class=\"center\"><img decoding=\"async\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/02\/before-after-commentaire-wordpress.png\" alt=\"\" title=\"\" width=\"596\" height=\"939\" class=\"noborder aligncenter size-full wp-image-2464\" srcset=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/02\/before-after-commentaire-wordpress.png 596w, https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/02\/before-after-commentaire-wordpress-190x300.png 190w, https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/02\/before-after-commentaire-wordpress-380x600.png 380w\" sizes=\"(max-width: 596px) 100vw, 596px\" \/><\/p>\n<p>Le tableau des champs (fields) ressemble \u00e0 cela :<\/p>\n<pre class=\"code\"><code class=\"language-php\">array(\r\n   'author' =&gt; '&lt;p class=\"comment-form-author\"&gt;&hellip;',\r\n   'email'  =&gt; '&lt;p class=\"comment-form-email\"&gt;&hellip;',\r\n   'url'    =&gt; '&lt;p class=\"comment-form-url\"&gt;&hellip;'\r\n);<\/code><\/pre>\n<p>Pour ajouter un champ il me suffit donc de faire (en rempla\u00e7ant \u00ab\u00a0slug\u00a0\u00bb par quelque chose de pertinent) :<\/p>\n<pre class=\"code\"><code class=\"php boc-nogutter boc-nocontrols\">$default['fields']['slug'] = '&lt;p class=\"comment-form-author-slug\"&gt;&hellip;';<\/code><\/pre>\n<p>La ligne 12 r\u00e9cup\u00e8re les cookies enregistr\u00e9s lorsque qu&rsquo;un commentaire est post\u00e9 par un utilisateur. Ils n&rsquo;existent donc pas lorsqu&rsquo;un visiteur n&rsquo;a jamais comment\u00e9 sur votre blog, mais permettent ensuite de pr\u00e9-remplir les champs (ligne 26 et 30) si l&rsquo;utilisateur revient poster un commentaire.<br \/>\nNous verrons plus loin comment nous enregistrons les cookies pour nos nouveaux champs de formulaire.<\/p>\n<p><strong>\u00c0 noter<\/strong> : Il existe le hook <code>comment_form_defaults_fields<\/code> qui permet de manipuler directement les champs (ex : <code>unset($default['url']<\/code>). Cependant j&rsquo;ai une l\u00e9g\u00e8re pr\u00e9f\u00e9rence pour le hook <code>comment_form_defaults<\/code> car il permet d&rsquo;atteindre d&rsquo;autres \u00e9l\u00e9ments du formulaire.<br \/>\nPar contre, si votre objectif est de supprimer simplement le champ url par exemple :<\/p>\n<pre class=\"code\"><code class=\"language-php\">add_filter('comment_form_default_fields','juiz_remove_url_field'); \r\nif ( !function_exists('juiz_remove_url_field')) {\r\n   function juiz_remove_url_field( $fields ) { \r\n      unset($fields['url']); return $fields;\r\n   }\r\n}<\/code><\/pre>\n<h2>Enregistrer les donn\u00e9es des champs personnalis\u00e9s<\/h2>\n<p>Cette seconde \u00e9tape se d\u00e9coupe en deux sous-\u00e9tapes si certains de vos champs sont obligatoires.<br \/>\nLe premier hook utilis\u00e9 est <code>comment_post<\/code> qui permet d&rsquo;intervenir lorsque le commentaire a \u00e9t\u00e9 enregistr\u00e9.<br \/>\nLe second est <code>preprocess_comment<\/code> qui intervient avant l&rsquo;enregistrement des donn\u00e9es en base, notamment pour les contr\u00f4ler.<\/p>\n<p>Nous allons donc d&rsquo;abord contr\u00f4ler notre champ obligatoire &lsquo;job&rsquo; pour retourner une erreur s&rsquo;il est vide :<\/p>\n<pre class=\"code\"><code class=\"language-php\">add_filter( 'preprocess_comment', 'juiz_verify_comment_data' );\r\nif ( !function_exists('juiz_verify_comment_data') ) {\r\n   function juiz_verify_comment_data( $commentdata ) {\r\n&nbsp;\r\n      \/\/ si job est vide on affiche une erreur\r\n      if ( ! isset( $_POST['job'] ) )\r\n         wp_die( __( 'Error: please fill the required field (job).' ) );\r\n&nbsp;\r\n      \/\/ si job d\u00e9passe 45 caract\u00e8res (arbitraire) on affiche une erreur\r\n      elseif ( isset( $_POST['job'] ) AND strlen ( $_POST['job'] ) > 45 )\r\n         wp_die( __( 'Error: 45 maximum char. for \"job\" field.' ) );\r\n&nbsp;\r\n      return $commentdata;\r\n   }\r\n}<\/code><\/pre>\n<p class=\"center\"><img decoding=\"async\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/02\/error-45-max.png\" alt=\"\" title=\"\" width=\"600\" height=\"85\" class=\"aligncenter size-full wp-image-2465\" srcset=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/02\/error-45-max.png 600w, https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/02\/error-45-max-300x42.png 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/p>\n<p>Une fois la donn\u00e9e obligatoire contr\u00f4l\u00e9e, nous enregistrons les donn\u00e9es du commentaire :<\/p>\n<pre class=\"code\"><code class=\"language-php\">add_action( 'comment_post', 'juiz_save_comment_data' );\r\nif ( !function_exists('juiz_save_comment_data') ) {\r\n   function juiz_save_comment_data( $comment_id ) {\r\n&nbsp;\r\n      \/\/ d\u00e9finition de la dur\u00e9e de vie des cookies\r\n      $comment_cookie_lifetime = apply_filters('comment_cookie_lifetime', 30000000);\r\n&nbsp;\r\n      if (isset($_POST['job'])) {\r\n&nbsp;\r\n         \/\/ on enregistre l'info en base de donn\u00e9es\r\n         add_comment_meta( $comment_id, 'job', esc_html( $_POST['job'] ) );\r\n&nbsp;\r\n         \/\/ on enregistre un cookie\r\n         setcookie('comment_author_job_' . COOKIEHASH, esc_html( $_POST['job'] ), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN);\r\n      }\r\n&nbsp;\r\n      \/\/ on v\u00e9rifie que le champ gender respecte les valeurs pr\u00e9vues\r\n      if (isset($_POST['gender']) AND in_array ( $_POST['gender'] , array('male', 'female'))) {\r\n         \/\/ m\u00eame sch\u00e9ma que pr\u00e9c\u00e9demment\r\n         add_comment_meta( $comment_id, 'gender', esc_html($_POST['gender']) );\r\n         setcookie('comment_author_gender_' . COOKIEHASH, esc_html( $_POST['gender']), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN);\r\n      }\r\n   }\r\n}<\/code><\/pre>\n<p>Le cookie est optionnel mais il permet de reproduire le comportement de WordPress qui ajoute un cookie par champ du formulaire de commentaire pour se souvenir des donn\u00e9es entr\u00e9es par le visiteur.<\/p>\n<p>En l&rsquo;\u00e9tat, nous avons ajout\u00e9 les infos en base de donn\u00e9es, nous avons cr\u00e9\u00e9 des cookies, et nous avons pris soin, dans l&rsquo;\u00e9tape pr\u00e9c\u00e9dente, de r\u00e9cup\u00e9rer ces cookies gr\u00e2ce \u00e0 la fonction <code><a href=\"http:\/\/codex.wordpress.org\/Function_Reference\/wp_get_current_commenter\" title=\"Codex WordPress pour la fonction wp_get_current_commenter\" hreflang=\"en\">wp_get_current_commenter()<\/a><\/code>. Sauf qu&rsquo;en fait cette fonction r\u00e9cup\u00e8re uniquement les cookies pour les champs \u00ab\u00a0classiques\u00a0\u00bb (Nom, url, e-mail). Il faut donc compl\u00e9ter cette fonction pour l&rsquo;inviter \u00e0 piocher dans nos cookies fraichement cr\u00e9\u00e9s :<\/p>\n<pre class=\"code\"><code class=\"language-php\">add_filter('wp_get_current_commenter', 'juiz_add_custom_comment_cookies');\r\nfunction juiz_add_custom_comment_cookies($cookies) {\r\n&nbsp;\r\n\t$comment_author_job = '';\r\n\tif ( isset($_COOKIE['comment_author_job_'.COOKIEHASH]) )\r\n\t\t$comment_author_job = $_COOKIE['comment_author_job_'.COOKIEHASH];\r\n&nbsp;\t\r\n\t$comment_author_gender = '';\r\n\tif ( isset($_COOKIE['comment_author_gender_'.COOKIEHASH]) )\r\n\t\t$comment_author_gender = $_COOKIE['comment_author_gender_'.COOKIEHASH];\r\n&nbsp;\t\r\n&nbsp;\r\n\t$cookies['comment_author_job'] = $comment_author_job;\r\n\t$cookies['comment_author_gender'] = $comment_author_gender;\r\n&nbsp;\r\n\treturn $cookies;\r\n}<\/code><\/pre>\n<p>La variable <code>$cookies<\/code> est un tableau associatif (cl\u00e9 + valeur), dont la cl\u00e9 est le nom du cookie (sans le <code>_cookiehash<\/code>) et la valeur est la valeur du cookie que l&rsquo;on r\u00e9cup\u00e8re s&rsquo;il existe.<\/p>\n<p>Maintenant il faut afficher ces informations dans notre liste de commentaire !<\/p>\n<h2>Afficher les donn\u00e9es personnalis\u00e9es dans la liste de commentaires<\/h2>\n<p>Cette derni\u00e8re \u00e9tape permet d&rsquo;afficher les informations dans la liste de commentaires. Il existe un certain nombre de hooks qui permettent d&rsquo;intervenir sur des zones pr\u00e9cises d&rsquo;un commentaire. Je vais en utiliser deux ici qui sont : <code>get_comment_author_link<\/code> et <code>get_avatar<\/code>.<\/p>\n<p>Je souhaite afficher le job \u00e0 c\u00f4t\u00e9 du nom de l&rsquo;auteur d&rsquo;un commentaire.<\/p>\n<pre class=\"code\"><code class=\"language-php\">add_filter( 'get_comment_author_link', 'juiz_attach_custom_info_to_comments_list' );\r\nif ( !function_exists('juiz_attach_custom_info_to_comments_list') ) {\r\n   function juiz_attach_custom_info_to_comments_list( $author ) {\r\n&nbsp;\r\n      \/\/ on r\u00e9cup\u00e8re l'info job\r\n      $job = get_comment_meta( get_comment_ID(), 'job', true );\r\n&nbsp;\r\n      \/\/ si l'info existe, on l'ajoute entre parenth\u00e8se apr\u00e8s l'auteur\r\n      if ( $job )\r\n         $author .= ' (' . $job . ')';\r\n&nbsp;\r\n      \/\/ on retourne l'info\r\n      return $author;\r\n   }\r\n}<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/02\/commentaires-recents.png\" alt=\"\" title=\"\" width=\"185\" height=\"143\" class=\"alignright size-full wp-image-2474\" \/> La variable <code>$author<\/code> contient le code HTML qui affiche le nom de l&rsquo;auteur (avec ou sans lien vers son site). On ne fait donc que rajouter du contenu \u00e0 la suite de cette chaine.<br \/>\nCette technique a l&rsquo;avantage d&rsquo;ajouter l&rsquo;information \u00e9galement dans le widget qui traite des derniers commentaires post\u00e9s.<\/p>\n<p>Pour afficher la valeur de gender, j&rsquo;aurais tr\u00e8s bien pu faire la m\u00eame chose en ajoutant l&rsquo;information \u00e0 la suite apr\u00e8s l&rsquo;avoir r\u00e9cup\u00e9r\u00e9e avec <code><a href=\"http:\/\/codex.wordpress.org\/Function_Reference\/get_comment_meta\" hreflang=\"en\" title=\"Lien vers le Codex WordPress pour la fonction get_comment_meta\">get_comment_meta()<\/a><\/code>. Mais comme j&rsquo;aime bien me compliquer la vie, j&rsquo;ai d\u00e9cid\u00e9 d&rsquo;ajouter une classe autour de l&rsquo;avatar de l&rsquo;utilisateur.<\/p>\n<pre class=\"code\"><code class=\"language-php\">add_filter ( 'get_avatar', 'juiz_attach_custom_gender_to_avatar');\r\nif ( !function_exists('juiz_attach_custom_gender_to_avatar') ) {\r\n   function juiz_attach_custom_gender_to_avatar( $avatar ) {\r\n&nbsp;\t\t\r\n      $gender = get_comment_meta( get_comment_ID(), 'gender', true );\r\n      $gender = $gender ? $gender : 'undefined';\r\n      $avatar = '&lt;span class=\"gender ' . $gender . '\"&gt;' . $avatar . '&lt;\/span&gt;';\r\n&nbsp;\t\t\r\n      return $avatar;\r\n   }\r\n}<\/code><\/pre>\n<p>La variable <code>$avatar<\/code> contient le code HTML de l&rsquo;avatar de l&rsquo;utilisateur, une simple image par d\u00e9faut. Ici on englobe l&rsquo;avatar d&rsquo;un \u00e9l\u00e9ment <code class=\"element\">span<\/code> porteur du classe <code>gender<\/code> ainsi que d&rsquo;une classe dynamique qui peut \u00eatre <code>male<\/code>, <code>female<\/code> ou <code>undefined<\/code> en fonction de l&rsquo;info que l&rsquo;on r\u00e9cup\u00e8re en base de donn\u00e9es.<\/p>\n<figure id=\"attachment_2469\" aria-labelledby=\"figcaption_attachment_2469\" class=\"wp-caption aligncenter\" style=\"width: 610px\"><img decoding=\"async\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/02\/commentaire-perso-wordpress.png\" alt=\"\" title=\"\" width=\"600\" height=\"140\" class=\"size-full wp-image-2469\" \/><figcaption id=\"figcaption_attachment_2469\" class=\"wp-caption-text\">Le m\u00e9tier plac\u00e9 \u00e0 c\u00f4t\u00e9 du nom d&#039;auteur, et l&#039;avatar customis\u00e9 avec un symbole en fonction du sexe.<\/figcaption><\/figure>\n<p>Et voil\u00e0, c&rsquo;est tout pour cette longue astuce, pour le reste c&rsquo;est \u00e0 vous d&rsquo;imaginer.<\/p>\n<h2 id=\"bonux1\">Option bonux 1&nbsp;: \u00e9diter un champ existant<\/h2>\n<p>En restant dans le premier hook (<code>comment_form_defaults<\/code>) il est possible d&rsquo;\u00e9diter les champs existants en les manipulants avec des expressions r\u00e9guli\u00e8res, ou en les r\u00e9\u00e9crivant :<\/p>\n<pre class=\"code\"><code class=\"language-php\">$default['fields']['author'] = '\r\n   &lt;p class=\"comment-form-author\"&gt;  \r\n      &lt;label for=\"author\"&gt;'. __('Name') . '&lt;\/label&gt;\r\n      &lt;span class=\"required\"&gt;*&lt;\/span&gt; \r\n      &lt;input id=\"author\" name=\"author\" value=\"'.$commenter['comment_author'].'\" placeholder=\"Votre nom ou pseudo\" aria-required=\"true\" size=\"30\" type=\"text\" \/&gt; \r\n   &lt;\/p&gt;\r\n';<\/code><\/pre>\n<p>Ici je rajouter un attribut <code>placeholder<\/code> par exemple.<br \/>\nInutile de changer quoi que ce soit dans le traitement des donn\u00e9es, WordPress le pr\u00e9voit d\u00e9j\u00e0.<br \/>\nMerci \u00e0 <a href=\"http:\/\/www.nicolasgilis.be\/\">Nicolas<\/a> pour la suggestion.<\/p>\n<h2 id=\"bonux2\">Option bonux 2 : redirection apr\u00e8s un commentaire<\/h2>\n<p>J&rsquo;ai crois\u00e9 dans le c\u0153ur de WordPress le hook <code>comment_post_redirect<\/code> qui permet de choisir la page de redirection lorsqu&rsquo;un utilisateur a post\u00e9 un commentaire.<br \/>\nPar d\u00e9faut cette page redirige vers le commentaire de l&rsquo;utilisateur avec une ancre.<br \/>\nVoici comment la fonction se pr\u00e9sente :<\/p>\n<pre class=\"code\"><code class=\"language-php\">add_action('comment_post_redirect', 'juiz_new_comment_redirection');\r\nif ( !function_exists('juiz_new_comment_redirection') ) {\r\n   function juiz_new_comment_redirection( $location ) {\r\n      \/\/ valeur par d\u00e9faut donn\u00e9e par WordPress\r\n      \/\/ \u00e0 vous de personnaliser $location en fonction de vos besoins\r\n      $location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id;\r\n      return $location;\r\n   }\r\n}<\/code><\/pre>\n<h2 id=\"bonux3\">Option bonux 3 : le code complet<\/h2>\n<p>Pour ceux qui ont peur d&rsquo;avoir rat\u00e9 une \u00e9tape :<\/p>\n<pre class=\"code\"><code class=\"language-php\">\/\/ ajout physique d'un champ\r\nadd_filter( 'comment_form_defaults', 'juiz_manage_default_fields');\r\n&nbsp;\r\n\/\/ $default contient tous les messages du formulaire de commentaire\r\n\/\/ il contient \u00e9galement \"comment_field\", le textarea du message\r\nif ( !function_exists('juiz_manage_default_fields')) {\r\n\tfunction juiz_manage_default_fields( $default ) {\r\n&nbsp;\r\n\t\t$commenter = wp_get_current_commenter();\r\n&nbsp;\r\n\t\t\/\/ Suppression d'un champ par d\u00e9faut parmi : author, email, url\r\n&nbsp;\t\t\r\n\t\t\/\/unset($default['fields']['url']);\r\n&nbsp;\t\t\r\n\t\t\/\/ Ajout des champs dans le tableau \"fields\"\r\n&nbsp;\t\t\r\n\t\t$default['fields']['job'] = '&lt;p class=\"comment-form-job comment-form-author\"&gt;\r\n\t\t&lt;label for=\"job\"&gt;'. __('Your job') . '&lt;\/label&gt;\r\n\t\t&lt;span class=\"required\"&gt;*&lt;\/span&gt;\r\n\t\t&lt;input id=\"job\" name=\"job\" aria-required=\"true\" size=\"30\" type=\"text\" value=\"' . esc_attr($commenter['comment_author_job']) . '\" \/&gt;\r\n\t\t&lt;\/p&gt;';\r\n&nbsp;\t\t\r\n\t\t$sel_female = $sel_male = '';\r\n\t\tif ( $commenter['comment_author_gender'] != '') ${'sel_' . $commenter['comment_author_gender']} = ' checked=\"checked\"';\r\n&nbsp;\t\t\r\n\t\t$default['fields']['gender'] = '&lt;p class=\"comment-form-gender\"&gt;\r\n\t\t&lt;span class=\"label_like\"&gt;'. __('Your gender') . '&lt;\/span&gt;\r\n\t\t&lt;label for=\"female\"&gt;F&lt;\/label&gt; &lt;input id=\"female\" '. $sel_female .' name=\"gender\" value=\"female\" type=\"radio\" \/&gt;\r\n\t\t&lt;label for=\"male\"&gt;M&lt;\/label&gt; &lt;input id=\"male\" '. $sel_male .' name=\"gender\" value=\"male\" type=\"radio\" \/&gt;\r\n\t\t&lt;\/p&gt;';\r\n&nbsp;\t\t\r\n\t\t\/\/ On retourne le tableau des champs\r\n&nbsp;\t\t\r\n\t\treturn $default;\r\n\t}\r\n}\r\n&nbsp;\r\n&nbsp;\r\n\/\/ controle des champs obligatoires \u00e0 l'enregistrement\r\nadd_filter( 'preprocess_comment', 'juiz_verify_comment_data' );\r\nif ( !function_exists('juiz_verify_comment_data') ) {\r\n\tfunction juiz_verify_comment_data( $commentdata ) {\r\n&nbsp;\r\n\t\tif ( ! isset( $_POST['job'] ) )\r\n\t\t\twp_die( __( 'Error: please fill the required field (job).' ) );\r\n\t\telseif ( isset( $_POST['job'] ) AND strlen ( $_POST['job'] ) > 45 )\r\n\t\t\twp_die( __( 'Error: 45 maximum char. for \"job\" field.' ) );\r\n&nbsp;\t\t\r\n\t\treturn $commentdata;\r\n\t}\r\n}\r\n&nbsp;\r\n\/\/ajout en base de donn\u00e9es des champs\r\nadd_action( 'comment_post', 'juiz_save_comment_data' );\r\nif ( !function_exists('juiz_save_comment_data') ) {\r\n\tfunction juiz_save_comment_data( $comment_id ) {\r\n&nbsp;\r\n\t\t$comment_cookie_lifetime = apply_filters('comment_cookie_lifetime', 30000000);\r\n&nbsp;\t\r\n\t\tif (isset($_POST['job']) AND strlen ($_POST['job']) &lt; 45) {\r\n\t\t\tadd_comment_meta( $comment_id, 'job', esc_html( $_POST['job'] ) );\r\n\t\t\tsetcookie('comment_author_job_' . COOKIEHASH, esc_html( $_POST['job'] ), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN);\r\n\t\t}\r\n&nbsp;\t\r\n\t\tif (isset($_POST['gender']) AND in_array ( $_POST['gender'] , array('male', 'female'))) {\r\n\t\t\tadd_comment_meta( $comment_id, 'gender', esc_html($_POST['gender']) );\r\n\t\t\tsetcookie('comment_author_gender_' . COOKIEHASH, esc_html( $_POST['gender']), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN);\r\n\t\t}\r\n\t}\r\n}\r\n&nbsp;\r\n&nbsp;\r\n\/\/ pour que get_commenter retourne nos cookies custom\r\nadd_filter('wp_get_current_commenter', 'juiz_add_custom_comment_cookies');\r\nfunction juiz_add_custom_comment_cookies($cookies) {\r\n&nbsp;\t\r\n\t$comment_author_job = '';\r\n\tif ( isset($_COOKIE['comment_author_job_'.COOKIEHASH]) )\r\n\t\t$comment_author_job = $_COOKIE['comment_author_job_'.COOKIEHASH];\r\n&nbsp;\t\t\r\n\t$comment_author_gender = '';\r\n\tif ( isset($_COOKIE['comment_author_gender_'.COOKIEHASH]) )\r\n\t\t$comment_author_gender = $_COOKIE['comment_author_gender_'.COOKIEHASH];\r\n\t\r\n&nbsp;\t\r\n\t$cookies['comment_author_job'] = $comment_author_job;\r\n\t$cookies['comment_author_gender'] = $comment_author_gender;\r\n&nbsp;\t\r\n\treturn $cookies;\r\n}\r\n&nbsp;\r\n&nbsp;\r\n\/\/ afficher l'info job dans la liste des commentaires\r\nadd_filter( 'get_comment_author_link', 'juiz_attach_custom_info_to_comments_list' );\r\nif ( !function_exists('juiz_attach_custom_info_to_comments_list') ) {\r\n\tfunction juiz_attach_custom_info_to_comments_list( $author ) {\r\n&nbsp;\t\r\n\t\t$job = get_comment_meta( get_comment_ID(), 'job', true );\r\n\t\tif ( $job )\r\n\t\t\t$author .= ' (' . $job . ')';\r\n&nbsp;\t\t\r\n\t\treturn $author;\r\n\t}\r\n}\r\n&nbsp;\r\n\/\/ afficher l'info gender graphiquement pas loin de l'avatar\r\nadd_filter ( 'get_avatar', 'juiz_attach_custom_gender_to_avatar');\r\nif ( !function_exists('juiz_attach_custom_gender_to_avatar') ) {\r\n\tfunction juiz_attach_custom_gender_to_avatar( $avatar ) {\r\n&nbsp;\t\t\r\n\t\t$gender = get_comment_meta( get_comment_ID(), 'gender', true );\r\n\t\t$gender = $gender ? $gender : 'undefined';\r\n\t\t\t$avatar = '&lt;span class=\"gender ' . $gender . '\"&gt;' . $avatar . '&lt;\/span&gt;';\r\n&nbsp;\t\t\r\n\t\treturn $avatar;\r\n\t}\r\n}\r\n&nbsp;\r\n\/\/ redirection personnalis\u00e9e apr\u00e8s un post de commentaire\r\nadd_action('comment_post_redirect', 'juiz_new_comment_redirection');\r\nif ( !function_exists('juiz_new_comment_redirection') ) {\r\n\tfunction juiz_new_comment_redirection( $location ) {\r\n\t\t$location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id;\r\n\t\treturn $location;\r\n\t}\r\n}<\/code><\/pre>\n<p>L&rsquo;espace de commentaire et l\u00e0 pour vous \ud83d\ude09<br \/>\nCet article a une suite !<\/p>\n<div class=\"tdm\">\n<h2>Sommaire<\/h2>\n<ol>\n<li><span class=\"current\">WordPress \u2013 Personnaliser les champs du formulaire de commentaire<\/span><\/li>\n<li><a href=\"\/blog\/tutoriels\/champs-personnalises-administration-commentaires\">WordPress \u2013 Des champs personnalis\u00e9s dans l&rsquo;administration des commentaires<\/a><\/li>\n<\/ol>\n<\/div>\n<div class=\"sources\">\n<h2>Sources et liens utiles<\/h2>\n<ul>\n<li><a href=\"http:\/\/yuguotheme.com\/customizing-comment-form-for-wordpress-3-0\/\" hreflang=\"en\" lang=\"en\">Customizing Comment form &#8211; Yuguotheme<\/a><\/li>\n<li><a href=\"http:\/\/4h18.com\/2011\/06\/modifier-le-formulaire-des-commentaires\/\">Modifier le formulaire des commentaires &#8211; 4h18<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>WordPress poss\u00e8de un formulaire de commentaire adapt\u00e9 \u00e0 la plupart des blogs. Cependant, comment s&rsquo;y prendre si vous souhaitez ajouter ou supprimer des champs et personnaliser l&rsquo;affichage des commentaires ?<\/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":[228,443,434,684],"coauthors":[597],"class_list":["post-2059","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriels","category-wordpress","tag-astuce","tag-commentaire","tag-hook","tag-wordpress"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/2059","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=2059"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/2059\/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=2059"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=2059"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=2059"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=2059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}