WordPress possède un formulaire de commentaire adapté à la plupart des blogs. Cependant, comment s’y prendre si vous souhaitez ajouter ou supprimer des champs et personnaliser l’affichage des commentaires ?
WordPress prévoit la possibilité de personnaliser le formulaire de commentaire grâce à la fonction comment_form( $args, $post_id ), cette fonction est intéressante mais quelque peu limitée. Nous allons plutôt aborder quelques crochets (hooks) s’y rapprochant.
Concrètement, il faut procéder en trois étapes :
- insérer ou supprimer un champ dans le formulaire
- permettre l’insertion des données renseignées dans la base de données
- afficher les nouvelles données dans les commentaires
Je vous invite à éditer votre fichier functions.php pour effectuer des tests avec les codes que je vais fournir.
Allez, c’parti !
Insérer et supprimer des champs dans le formulaire de commentaire
Cette première étape va utiliser le hook comment_form_defaults et se présente sous la forme d’une manipulation de tableau PHP.
Les champs sont enregistrés dans l’entrée « fields » du tableau et peuvent être manipulés assez simplement. Ils contiennent du code HTML que nous allons reproduire pour nos champs personnalisés.
add_filter( 'comment_form_defaults', 'juiz_manage_default_fields');
// $default contient tous les messages du formulaire de commentaire
// il contient également "comment_field", le textarea du message
if ( !function_exists('juiz_manage_default_fields')) {
function juiz_manage_default_fields( $default ) {
// Récupération des infos connues sur le visiteur
// Permet de pré-remplir nos nouveaux champs
$commenter = wp_get_current_commenter();
// Suppression d'un champ par défaut parmi : author, email, url
unset ( $default['fields']['url'] );
// Ajout des champs dans le tableau "fields"
// $commenter[] contient les infos sur le visiteur
$default['fields']['job'] = '<p class="comment-form-author-job comment-form-author">
<label for="job">'. __('Your job') . '</label>
<span class="required">*</span>
<input id="job" name="job" value="'.$commenter['comment_author_job'].'" aria-required="true" size="30" type="text" />
</p>';
$sel_female = $sel_male = '';
if ( $commenter['comment_author_gender'] != '') ${'sel_'.$commenter['comment_author_gender']} = ' checked="checked"';
$default['fields']['gender'] = '<p class="comment-form-author-gender">
<span class="label_like">'. __('Your gender') . '</span>
<label for="female">F</label> <input '. $sel_female .' id="female" name="gender" value="female" type="radio" />
<label for="male">M</label> <input '. $sel_male .' id="male" name="gender" value="male" type="radio" />
</p>';
// On retourne le tableau des champs
return $default;
}
}Quelques explications s’imposent :
Concernant le HTML produit, je copie et adapte la structure par défaut de mon thème sur les champs de formulaire (ici TwentyEleven) dans le but de limiter les modifications futures sur la CSS (d’où la copie de la classe comment-form-author sur comment-form-author-job).

Le tableau des champs (fields) ressemble à cela :
array(
'author' => '<p class="comment-form-author">…',
'email' => '<p class="comment-form-email">…',
'url' => '<p class="comment-form-url">…'
);Pour ajouter un champ il me suffit donc de faire (en remplaçant « slug » par quelque chose de pertinent) :
$default['fields']['slug'] = '<p class="comment-form-author-slug">…';La ligne 12 récupère les cookies enregistrés lorsque qu’un commentaire est posté par un utilisateur. Ils n’existent donc pas lorsqu’un visiteur n’a jamais commenté sur votre blog, mais permettent ensuite de pré-remplir les champs (ligne 26 et 30) si l’utilisateur revient poster un commentaire.
Nous verrons plus loin comment nous enregistrons les cookies pour nos nouveaux champs de formulaire.
À noter : Il existe le hook comment_form_defaults_fields qui permet de manipuler directement les champs (ex : unset($default['url']). Cependant j’ai une légère préférence pour le hook comment_form_defaults car il permet d’atteindre d’autres éléments du formulaire.
Par contre, si votre objectif est de supprimer simplement le champ url par exemple :
add_filter('comment_form_default_fields','juiz_remove_url_field');
if ( !function_exists('juiz_remove_url_field')) {
function juiz_remove_url_field( $fields ) {
unset($fields['url']); return $fields;
}
}Enregistrer les données des champs personnalisés
Cette seconde étape se découpe en deux sous-étapes si certains de vos champs sont obligatoires.
Le premier hook utilisé est comment_post qui permet d’intervenir lorsque le commentaire a été enregistré.
Le second est preprocess_comment qui intervient avant l’enregistrement des données en base, notamment pour les contrôler.
Nous allons donc d’abord contrôler notre champ obligatoire ‘job’ pour retourner une erreur s’il est vide :
add_filter( 'preprocess_comment', 'juiz_verify_comment_data' );
if ( !function_exists('juiz_verify_comment_data') ) {
function juiz_verify_comment_data( $commentdata ) {
// si job est vide on affiche une erreur
if ( ! isset( $_POST['job'] ) )
wp_die( __( 'Error: please fill the required field (job).' ) );
// si job dépasse 45 caractères (arbitraire) on affiche une erreur
elseif ( isset( $_POST['job'] ) AND strlen ( $_POST['job'] ) > 45 )
wp_die( __( 'Error: 45 maximum char. for "job" field.' ) );
return $commentdata;
}
}
Une fois la donnée obligatoire contrôlée, nous enregistrons les données du commentaire :
add_action( 'comment_post', 'juiz_save_comment_data' );
if ( !function_exists('juiz_save_comment_data') ) {
function juiz_save_comment_data( $comment_id ) {
// définition de la durée de vie des cookies
$comment_cookie_lifetime = apply_filters('comment_cookie_lifetime', 30000000);
if (isset($_POST['job'])) {
// on enregistre l'info en base de données
add_comment_meta( $comment_id, 'job', esc_html( $_POST['job'] ) );
// on enregistre un cookie
setcookie('comment_author_job_' . COOKIEHASH, esc_html( $_POST['job'] ), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN);
}
// on vérifie que le champ gender respecte les valeurs prévues
if (isset($_POST['gender']) AND in_array ( $_POST['gender'] , array('male', 'female'))) {
// même schéma que précédemment
add_comment_meta( $comment_id, 'gender', esc_html($_POST['gender']) );
setcookie('comment_author_gender_' . COOKIEHASH, esc_html( $_POST['gender']), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN);
}
}
}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ées entrées par le visiteur.
En l’état, nous avons ajouté les infos en base de données, nous avons créé des cookies, et nous avons pris soin, dans l’étape précédente, de récupérer ces cookies grâce à la fonction wp_get_current_commenter(). Sauf qu’en fait cette fonction récupère uniquement les cookies pour les champs « classiques » (Nom, url, e-mail). Il faut donc compléter cette fonction pour l’inviter à piocher dans nos cookies fraichement créés :
add_filter('wp_get_current_commenter', 'juiz_add_custom_comment_cookies');
function juiz_add_custom_comment_cookies($cookies) {
$comment_author_job = '';
if ( isset($_COOKIE['comment_author_job_'.COOKIEHASH]) )
$comment_author_job = $_COOKIE['comment_author_job_'.COOKIEHASH];
$comment_author_gender = '';
if ( isset($_COOKIE['comment_author_gender_'.COOKIEHASH]) )
$comment_author_gender = $_COOKIE['comment_author_gender_'.COOKIEHASH];
$cookies['comment_author_job'] = $comment_author_job;
$cookies['comment_author_gender'] = $comment_author_gender;
return $cookies;
}La variable $cookies est un tableau associatif (clé + valeur), dont la clé est le nom du cookie (sans le _cookiehash) et la valeur est la valeur du cookie que l’on récupère s’il existe.
Maintenant il faut afficher ces informations dans notre liste de commentaire !
Afficher les données personnalisées dans la liste de commentaires
Cette dernière étape permet d’afficher les informations dans la liste de commentaires. Il existe un certain nombre de hooks qui permettent d’intervenir sur des zones précises d’un commentaire. Je vais en utiliser deux ici qui sont : get_comment_author_link et get_avatar.
Je souhaite afficher le job à côté du nom de l’auteur d’un commentaire.
add_filter( 'get_comment_author_link', 'juiz_attach_custom_info_to_comments_list' );
if ( !function_exists('juiz_attach_custom_info_to_comments_list') ) {
function juiz_attach_custom_info_to_comments_list( $author ) {
// on récupère l'info job
$job = get_comment_meta( get_comment_ID(), 'job', true );
// si l'info existe, on l'ajoute entre parenthèse après l'auteur
if ( $job )
$author .= ' (' . $job . ')';
// on retourne l'info
return $author;
}
}
La variable $author contient le code HTML qui affiche le nom de l’auteur (avec ou sans lien vers son site). On ne fait donc que rajouter du contenu à la suite de cette chaine.
Cette technique a l’avantage d’ajouter l’information également dans le widget qui traite des derniers commentaires postés.
Pour afficher la valeur de gender, j’aurais très bien pu faire la même chose en ajoutant l’information à la suite après l’avoir récupérée avec get_comment_meta(). Mais comme j’aime bien me compliquer la vie, j’ai décidé d’ajouter une classe autour de l’avatar de l’utilisateur.
add_filter ( 'get_avatar', 'juiz_attach_custom_gender_to_avatar');
if ( !function_exists('juiz_attach_custom_gender_to_avatar') ) {
function juiz_attach_custom_gender_to_avatar( $avatar ) {
$gender = get_comment_meta( get_comment_ID(), 'gender', true );
$gender = $gender ? $gender : 'undefined';
$avatar = '<span class="gender ' . $gender . '">' . $avatar . '</span>';
return $avatar;
}
}La variable $avatar contient le code HTML de l’avatar de l’utilisateur, une simple image par défaut. Ici on englobe l’avatar d’un élément span porteur du classe gender ainsi que d’une classe dynamique qui peut être male, female ou undefined en fonction de l’info que l’on récupère en base de données.

Et voilà, c’est tout pour cette longue astuce, pour le reste c’est à vous d’imaginer.
Option bonux 1 : éditer un champ existant
En restant dans le premier hook (comment_form_defaults) il est possible d’éditer les champs existants en les manipulants avec des expressions régulières, ou en les réécrivant :
$default['fields']['author'] = '
<p class="comment-form-author">
<label for="author">'. __('Name') . '</label>
<span class="required">*</span>
<input id="author" name="author" value="'.$commenter['comment_author'].'" placeholder="Votre nom ou pseudo" aria-required="true" size="30" type="text" />
</p>
';Ici je rajouter un attribut placeholder par exemple.
Inutile de changer quoi que ce soit dans le traitement des données, WordPress le prévoit déjà.
Merci à Nicolas pour la suggestion.
Option bonux 2 : redirection après un commentaire
J’ai croisé dans le cœur de WordPress le hook comment_post_redirect qui permet de choisir la page de redirection lorsqu’un utilisateur a posté un commentaire.
Par défaut cette page redirige vers le commentaire de l’utilisateur avec une ancre.
Voici comment la fonction se présente :
add_action('comment_post_redirect', 'juiz_new_comment_redirection');
if ( !function_exists('juiz_new_comment_redirection') ) {
function juiz_new_comment_redirection( $location ) {
// valeur par défaut donnée par WordPress
// à vous de personnaliser $location en fonction de vos besoins
$location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id;
return $location;
}
}Option bonux 3 : le code complet
Pour ceux qui ont peur d’avoir raté une étape :
// ajout physique d'un champ
add_filter( 'comment_form_defaults', 'juiz_manage_default_fields');
// $default contient tous les messages du formulaire de commentaire
// il contient également "comment_field", le textarea du message
if ( !function_exists('juiz_manage_default_fields')) {
function juiz_manage_default_fields( $default ) {
$commenter = wp_get_current_commenter();
// Suppression d'un champ par défaut parmi : author, email, url
//unset($default['fields']['url']);
// Ajout des champs dans le tableau "fields"
$default['fields']['job'] = '<p class="comment-form-job comment-form-author">
<label for="job">'. __('Your job') . '</label>
<span class="required">*</span>
<input id="job" name="job" aria-required="true" size="30" type="text" value="' . esc_attr($commenter['comment_author_job']) . '" />
</p>';
$sel_female = $sel_male = '';
if ( $commenter['comment_author_gender'] != '') ${'sel_' . $commenter['comment_author_gender']} = ' checked="checked"';
$default['fields']['gender'] = '<p class="comment-form-gender">
<span class="label_like">'. __('Your gender') . '</span>
<label for="female">F</label> <input id="female" '. $sel_female .' name="gender" value="female" type="radio" />
<label for="male">M</label> <input id="male" '. $sel_male .' name="gender" value="male" type="radio" />
</p>';
// On retourne le tableau des champs
return $default;
}
}
// controle des champs obligatoires à l'enregistrement
add_filter( 'preprocess_comment', 'juiz_verify_comment_data' );
if ( !function_exists('juiz_verify_comment_data') ) {
function juiz_verify_comment_data( $commentdata ) {
if ( ! isset( $_POST['job'] ) )
wp_die( __( 'Error: please fill the required field (job).' ) );
elseif ( isset( $_POST['job'] ) AND strlen ( $_POST['job'] ) > 45 )
wp_die( __( 'Error: 45 maximum char. for "job" field.' ) );
return $commentdata;
}
}
//ajout en base de données des champs
add_action( 'comment_post', 'juiz_save_comment_data' );
if ( !function_exists('juiz_save_comment_data') ) {
function juiz_save_comment_data( $comment_id ) {
$comment_cookie_lifetime = apply_filters('comment_cookie_lifetime', 30000000);
if (isset($_POST['job']) AND strlen ($_POST['job']) < 45) {
add_comment_meta( $comment_id, 'job', esc_html( $_POST['job'] ) );
setcookie('comment_author_job_' . COOKIEHASH, esc_html( $_POST['job'] ), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN);
}
if (isset($_POST['gender']) AND in_array ( $_POST['gender'] , array('male', 'female'))) {
add_comment_meta( $comment_id, 'gender', esc_html($_POST['gender']) );
setcookie('comment_author_gender_' . COOKIEHASH, esc_html( $_POST['gender']), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN);
}
}
}
// pour que get_commenter retourne nos cookies custom
add_filter('wp_get_current_commenter', 'juiz_add_custom_comment_cookies');
function juiz_add_custom_comment_cookies($cookies) {
$comment_author_job = '';
if ( isset($_COOKIE['comment_author_job_'.COOKIEHASH]) )
$comment_author_job = $_COOKIE['comment_author_job_'.COOKIEHASH];
$comment_author_gender = '';
if ( isset($_COOKIE['comment_author_gender_'.COOKIEHASH]) )
$comment_author_gender = $_COOKIE['comment_author_gender_'.COOKIEHASH];
$cookies['comment_author_job'] = $comment_author_job;
$cookies['comment_author_gender'] = $comment_author_gender;
return $cookies;
}
// afficher l'info job dans la liste des commentaires
add_filter( 'get_comment_author_link', 'juiz_attach_custom_info_to_comments_list' );
if ( !function_exists('juiz_attach_custom_info_to_comments_list') ) {
function juiz_attach_custom_info_to_comments_list( $author ) {
$job = get_comment_meta( get_comment_ID(), 'job', true );
if ( $job )
$author .= ' (' . $job . ')';
return $author;
}
}
// afficher l'info gender graphiquement pas loin de l'avatar
add_filter ( 'get_avatar', 'juiz_attach_custom_gender_to_avatar');
if ( !function_exists('juiz_attach_custom_gender_to_avatar') ) {
function juiz_attach_custom_gender_to_avatar( $avatar ) {
$gender = get_comment_meta( get_comment_ID(), 'gender', true );
$gender = $gender ? $gender : 'undefined';
$avatar = '<span class="gender ' . $gender . '">' . $avatar . '</span>';
return $avatar;
}
}
// redirection personnalisée après un post de commentaire
add_action('comment_post_redirect', 'juiz_new_comment_redirection');
if ( !function_exists('juiz_new_comment_redirection') ) {
function juiz_new_comment_redirection( $location ) {
$location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id;
return $location;
}
}L’espace de commentaire et là pour vous ![]()



Voici un beau tuto, particulièrement bien détaillé. Le fonctionnement du formulaire est finement désossé et permet de bien comprendre comment l’ensemble fonctionne. Récupération de l’existant, modification, sauvegarde et récupération des données, traitement des cookies, de nombreux aspects sont ici abordés, et on peut s’inspirer de leur traitement pour d’autres applications.
Merci pour ces éloges
Merci beaucoup pour tes contributions de qualités au web francophone, ça fais super plaisir. Merci
Super détaillé, merci beaucoup pour le tuto, ça va s’avérer utile.
Wow, c’est ce que j’appelle un tutoriel de qualité, je garde ça sous le coude, merci !
Merci à vous !
Merci pour ce tuto, qui est très proche de ce que je cherche, mais n’y répond malheureusement pas
Sur mon blog, j’aimerais proposer un commentaire par défaut que les visiteurs peuvent modifier a leur guise avant le de valider.
par exemple, j’aimerais afficher un tableau de multiplication (en html) et les visiteurs devront le compléter avant de le valider ou simplement tout supprimer pour ecrire un commentaire classique.
Bonjour Yann,
Dans la première partie de l’article, je mentionne la possibilité d’atteindre d’autres éléments du formulaire. Le champ textarea du formulaire en fait partie, il est atteignable à travers :
$default['comment_field']Du coup en ajoutant ce morceau de code dans la toute première fonction présentée, ça devrait répondre à vos besoins.
Je donne souvent quelques pistes dans mes tutoriels qu’il vous appartient ensuite d’explorer pour aller plus loin
Bonne continuation.
Merci beaucoup pour votre « aide », enfin, la vous avez fait tout mon boulot
Merci beaucoup, un site de plus ajouté a mes favoris
Merci Yann.
Au plaisir
J’avoue être complétement perdu, j’utilise le thème Imbalance 2 avec WordPress MU, et impossible de mettre la main le moindre éléments, par exemple comment_form_defaults
Comment tu as procédé ?
Bonjour,
J’ai finalement réussi a mettre en place un nouveau commentaire par défaut sous forme HTML, j’avais mal placé ton code au sein de la page fonctions.php.
Pour info, j’ai du également rajouté le module CKEditor afin que mon code HTML soit affiché correctement dans le textarea.
Merci encore.
Hello,
Merci pour l’info et bonne continuation
Bonjour,
Je me permets de laisser un commentaire sur ce sujet pour tenter de résoudre un problème sur mon blog car je vois que vous parler ici de sauvegarde des données.
sur mon site des utilisateurs se plaignent de devoir réécrire à chaque fois leurs données dans les champs obligatoires tel que nom,e-mail,… de » laisser un commentaire « .
Dans réglage–discussion : J’ ai décoché la case » l’ auteur d’ un commentaire doit renseigner son nom et son adresse de messagerie » mais cela ne règle pas mon problème.
Me faut il utiliser une partie de votre code ou suis-je totalement hors-sujet.Je cherche une solution sur le net depuis un bon moment mais je ne trouve pas de solution.
Merci par avance
cordialement
arnaud
Bonjour,
Il est possible que vos utilisateurs aient désactivé l’enregistrement des cookies, ou les effacent à chaque nouvelle session de navigation.
Est-ce absolument systématique ? Avez-vous également le problème sur votre propre machine avec cookies activés ?
Je sais également que les thèmes ElegantThemes utilisent des templates personnalisés des formulaires de commentaire, il est possible que cela influe sur le comportement du formulaire. Il faudrait que je regarde la composition de ce thème.
Bonne fin de journée.
Il me semble également qu’ il y a conflit avec le template d’ elegant.
Merci pour ta réponse, je ne vais pas t’ ennuyer plus longtemps, je vais régler ça directement avec eux.
merci encore.
bye arnaud
Merci pour ce très bon tuto.
Mais n’est-il pas possible de personnaliser complètement le formulaire ?
Par exemple de pouvoir rajouter une class à la balise « form », pouvoir mettre un fieldset ou des div autour du bouton submit, ni même de mettre une class au bouton submit.
Bonjour Benjamin,
Il est possible de retravailler chacun des champs, donc de prévoir un fieldset par exemple, en jouant avec les premiers champs ainsi :
Ici ça permet de placer un fieldset pour l’ensemble des champs author, e-mail et url.
Pour la classe sur le formulaire je ne crois pas, mais il est possible de mettre une classe sur le parent du formulaire.
Je n’ai pas trouvé pour le reste également.
Bon week-end !
Ça reste de la bidouille mais ça marche. Merci pour ta réponse.
Espérons que WordPress fasse une mise à jour rapidement de ce côté la pour le reste.
Bon week-end à toi également.
Je ne pense pas que ce soit une des priorités de développement du cœur
Je viens de revérifier dans le template du formulaire dans le cœur de WordPress, il n’y a rien de prévu pour les éditions que tu demandes.
Bonne semaine !
Pour info j’ai trouvé une alternative à mon problème. J’ai utilisé jQuery pour ajouter ma class. C’est un peu lourd juste pour une class mais ça marche.
Merci encore pour t’es infos, et bonne semaine à toi également.
bonjour, j’aimerai savoir comment ajouter « laisser un commentaire » à coté de « 0 commentaires », j’ai essayé plusieurs modifications en vain. pouvez vous m’aider svp ?
Bonjour Émi,
Dans ton thème Yoko tu as deux endroits où cette information apparaît :
- le fichier content.php de ton thème (l’information se trouve ligne 16)
- le fichier comments.php de ton thème (ligne 26)
On dirait que tu as déjà essayé de modifier la ligne 26.
Essaye de remplacer à partir de la ligne 25 par :
Je ne sais pas exactement si c’est ça que tu recherches…
Bon courage.
merci beaucoup ! alors c’est déjà bien mais non je parle du lien sur lequel on clique juste quand on ne voit que l’article, à coté de la date de post de l’article etc et j’aurai voulu le placer en dessous de l’article comme sur skyrock blog. sauriez vous faire ça ?
y a t’il aussi moyen de retirer tous ces « yoko elmastudio » et compagnie ?
Hello,
Je te réponds oui dans les deux cas mais je ne pourrai t’expliquer que demain seulement, je n’ai pas accès aux fichiers d’où je poste.
Bonne soirée.
pas de problème ! merci j’attends c’est déjà très bien
Hello,
Désolé pour le retard, beaucoup de taff en ce moment.
Pour la mention de l’auteur, saches que l’auteur apprécie toujours un petit lien quelque part sur ton site. Si tu le retires du footer, je t’invite à le mettre dans une page du genre « mentions légales » ou « à propos ».
Il faut éditer le fichier
footer.phpen remplaçant :par
Concernant l’affichage du petit lien qui invite à commenter, ça se passe dans
content-single.php, à la ligne où tu vois ça :juste après, rajoute ça :
Normalement ça devrait le faire.
Bon courage
Bonsoir, merci beaucoup encore une fois ! pour le « laisser un commentaire » il faut avoir cliqué indépendamment sur l’article. moi j’aurai aimé juste en ayant cliqué sur « accueil » là ou il y a mes articles en avant et les récents le voir aussi « laisser un commentaire ». est ce que vous voyez ce que je veux dire ? désolée encore de vous embeter je suis exigeante !
merci d’avance.
pour l’auteur je l’ai mis dans le premier article
Merci pour l’auteur
Pour insérer le lien vers le formulaire de commentaire d’un article depuis la liste de la page d’accueil, il faut que tu modifies le fichier
content.php, ligne 16, remplace :par
Voilà voilà
Puis si jamais tu utilises les autres types d’articles (liens, vidéos, etc.), tu devras peut-être aussi trouver les parties de code ressemblant dans les différents fichiers
content-*.php.Bonne journée.
Très bon ce tuto ! grand merci. Je savais rajouter un champ pour twitter, grâce au tuto de grafikart. Mais là les checkbox, c’est top, ca me donne des idées
Bonjour Geoffrey,
J’avoue être complètement perdu. J’utilise le theme Yoko.
Ma premiére question est : Quel est le fichier fonction.php que l’on doit modifier??? Celui du théme ou l’initial de WP.
Ma seconde question est : Quels bouts de code dois-je supprimer dans ma page fonction.php? Y a t’il un code initial à supprimer?
Troisiéme question : Lorque je colle juste le code en bout de la page fonction.php du thème j’ai les mêmes entrées du formulaire suivis des nouvelles entrées non codées avec le même CSS.
Je suis désolé j’ai bien conscience que je suis en dessous du niveau
Bonjour Quentin,
Ce n’est pas une question de niveau, il est fort probable que, par habitude du fonctionnement de WordPress, je ne sois pas suffisamment précis dans mes propos.
Lorsqu’on modifie une partie du fonctionnement de WordPress, on passe soit par un plugin, soit par un thème. Je ne vous demanderai jamais de modifier le cœur du CMS.
Donc oui il s’agit bien de modifier le fichier
functions.phpdu thème Yoko (wp-content/themes/yoko/).Il n’y a pas vraiment de morceau de code à supprimer, tout dépend de ce que tu souhaites obtenir au final en fait.
Dans le premier code que je fournis (qui est une fonction à prendre en l’état), je présente deux choses, la suppression d’un des champs existant :
Et l’ajout d’un champ :
L’ajout permet de placer des nouveaux champs à la suite des anciens (entre les champs existant et le champs de texte « commentaire »).
C’est ici qu’il faut composer le code HTML en calquant celui de ton thème Yoko afin que les styles du thème soient appliqués. Si malgré la copie de la structure HTML, les champs n’ont pas les bons styles, il te faudra utiliser un peu de CSS (en modifiant
style.css).Bonne journée.
Intéressant. Je n’ai pas lu dans le détail mais même moi qui suis plus que novice en php et code, j’ai l’impression que le tutoriel est à ma portée. Je ne manquerai pas de m’y repencher dès que j’aurai un peu plus de temps. Merci.
Merci.
Si tu as des retours à faire au moment où tu te pencheras plus en détail sur son étude, je suis à l’écoute
Bonne soirée.
Je n’y manquerai pas. Ca ne devrait plus tellement tarder (le projet dont il est question est un projet « pur plaisir », ce qui ne le met pas en priorité malheureusement).
J’espère que la réponse n’est pas déjà dans le texte (il ne me semble pas après avoir lu en diagonale) mais qu’en est-il des anciens commentaires (sur un blog pré-existant) lorsqu’on modifie le formulaire de commentaire en ajoutant une valeur obligatoire ? Par exemple, mettons que j’ajoute le genre en obligatoire. Les commentaires déjà présent n’ont pas cette information.
Normalement ça ne pose pas de problème puisque dans mes tests j’avais ajouté les différents champs un par un et plusieurs « versions » de commentaires cohabitaient.
Donc ça devrait aller.
Je te remercie pour cette réponse. Reste à lire le détail pour moi donc
.
bonjour Geoffrey ,
merci pour ce tuto c’est exactement ce que je cherchais par contre je cherche aussi intégrer une liste déroulante dans un des champs et je n’y parviens pas…
cordialement
charly
Bonjour Charly,
Logiquement ça doit fonctionner de la même manière que pour le reste, il suffit de rajouter le champ comme pour « job » dans la première fonction :
Ensuite il est possible d’enregistrer et récupérer cette valeur de la même manière que les autres, en suivant l’exemple de « job » il suffira de remplacer « job » par « activity » si on en reste au code que je te propose ici.
Bon courage
Merci pour tout ça Geoffrey ,
j’avais fait une erreur de guillemet au niveau de la value…j’ai un peu honte
bonne soirée
Félicitation,
Un très joli bon site
Merci bcp Geoffrey…ça marche super bien..:)….
merci votre message ma beaucoup aidez
bonjour,
comment faire pour enlever totalement le champ « commentaires » (la possibilité de laisser des commentaires et donc avoir 1 site qui est juste 1 portfolio)?
merci pour votre réponse.
Bonjour,
Cela se passe dans le menu Réglages > Discussion > « Autoriser les visiteurs à publier des commentaires sur les derniers articles » > Décocher.
Bonne journée
Bonjour, ça n’a pas fonctionné en décochant. Mais j’ai trouvé 1 solution en rajoutant (style= »display : none ») dans loop-single.php.
Par contre, je cherche aussi à agencer les galeries dans les posts. Les vignettes sont présentées en vertical avec de la marge avec 1 marge, et je voudrais les présenter en horizontal. exemple sur mon site > http://www.patfender.com/photos/masters-13-de-golf/
Je cherche dans le css mais je ne trouve pas. Auriez-vous 1 solution?
Merci
Bonjour,
Cela fonctionne forcément, c’est probablement parce que le contenu était existant avant la désactivation de cette option (l’indice est dans l’intitulé de l’option
).
Pour désactiver les commentaires sur les contenus (pages et articles) déjà publiés, il faut éditer le post concerné et décocher la case dans « discussion ».
Concernant votre problème de mise en page, vous comprendrez que je ne peux pas proposer un service de débogage à tous mes lecteurs. La création de template WordPress est un travail : Studio Web. Mais la solution se trouve sur ce blog (recherche : « display inline-block »).
Merci.
Bonjour Geoffrey,
A tout hasard : Connaissez-vous une soluce sans plugins pour stocker les données d’un formulaire dans la base de donnée ?
Je crois que le salut vient de $wpdb, mais pour maitriser ce truc propriétaire, j’en bave un peu (je trouve plus simple de maitriser le standard PDO, mais ce n’est pas compatible avec WP). Comme plugins, il existe une extension pour Contact Form 7 : « Contact Form 7 to Database Extension », mais ce n’est pas mon but…
Bonsoir Olivier,
Tu peux me tutoyer tu sais
Je ne connais pas d’autre technique que l’utilisation de la classe wpdb. Elle n’est pas si complexe que cela (pourtant je ne suis pas développeur) et est plutôt bien documentée : http://codex.wordpress.org/Class_Reference/wpdb
Elle permet de se greffer en toute sécurité sur les noms variables des tables de la base de données.
Bon courage
Bon, et bien je n’ai plus qu’à m’y coller!
Merci beaucoup pour ce tuto exhaustif. Il existe une multitude de plugins wordpress qui gèrent les formulaires personnalisés aujourd’hui, mais je rechignais à m’embarquer dans une usine à gaz (configuration front+back avec des lignes de code pas toujours « vérifiables »).
Ton article va me permettre de le faire DIY-style !
Bonjour,
il y a là toutes les réponses aux questions que je me pose et plus encore traitées avec brio !!!
mais , débutant , je ne trouve pas dans fonction.php la partie à modifier.
je souhaite supprimer la demande ‘email’
mais rien à faire je ne sais que fichier éditer je suis sous le dernier wordpress
Merci très fort
Bonjour,
Vous pouvez facilement trouver la réponse à cette question dans les commentaires plus au du vôtre.
Indice : Il faut utiliser la fonction
unset();sur le bon champ.Merci
enfin résolu grâce à vous !!!!
mon second but est de « figer » la page d’accueil pour mes ! écrits et de supprimer
le lien « déposer un commentaire »
qu ‘il n’apparaisse plus sur cette page .
Merci
Je pense que ça va désormais se passer dans les fichiers PHP de ton thème, au niveau des boucles.
Bon courage
A propos de « Il commence à dater, lisez-le donc en gardant son âge en tête ! » est bien sache que ton article restera jeune car il est fait soigneusement on voit qu’il y a du travail derrière et beaucoup de motivation. je reviendrait dans 3 ans
Merci du compliment
Disons que j’essaye de maintenir les astuces à jour, et si ça ne fonctionnait plus, j’espère que les lecteurs sauront y apporter contribution, au moins en me le mentionnant.
Au plaisir.
Bonsoir,
Félicitations pour ton tuto, remarquable ! Tout ce que j’aime. J’ai pu l’adapter sans problème à mes propres besoins et ça marche très bien. Merci !
Mais j’ai quelques questions cependant :
1/ Les champs ajoutés au tableau $default apparaissent dans le cas d’un contributeur non connecté au site. Comment procéder pour que des champs restent dispo dans le cas d’un utilisateur connecté au site ?
2/ Comment procéder aussi pour permettre une modification a posteriori d’une métadonnée ? Car là encore, quand on modifie depuis l’interface d’admin un commentaire, les métadonnées ajoutées sont absentes…
Merci par avance
Bonjour,
Je pense avoir trouvé une première réponse.
Les actions comment_form_logged_in_after et comment_form_after_fields semblent ajouter des champs pour respectivement les utilisateurs déjà connectés et les utilisateurs non connectés.
Elles devraient donc permettre de compléter comment_form_defaults pour ajouter des champs selon les circonstances.
Je vais tester ça.
D’acc, tu nous tiendras au courant ?
Thanks.
Merci beaucoup Geoffrey…ça marche super bien.