J'utilise un filtre personnalisé pour changer les champs, mais je ne vois pas comment changer le order des champs dans le formulaire de commentaire.
Ordre souhaité:
C'est le code que j'utilise actuellement:
function alter_comment_form_fields($fields){
$fields['comments'] = 'Test';
$fields['author'] = '<p class="comment-form-author">' . '<label for="author">' . __( 'Your name, please' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
'<input id="author" name="author" type="text" placeholder="John Smith" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>';
$fields['email'] = 'next'; //removes email field
//$fields['url'] = ''; //removes website field
return $fields;
}
add_filter('comment_form_default_fields','alter_comment_form_fields');
C'est assez simple. Vous devez simplement extraire la textarea
des champs par défaut - filter 'comment_form_defaults'
- et l’imprimer sur l’action 'comment_form_top'
:
<?php # -*- coding: utf-8 -*-
/**
* Plugin Name: T5 Comment Textarea On Top
* Description: Makes the textarea the first field of the comment form.
* Version: 2012.04.30
* Author: Thomas Scholz <[email protected]>
* Author URI: http://toscho.de
* License: MIT
* License URI: http://www.opensource.org/licenses/mit-license.php
*/
// We use just one function for both jobs.
add_filter( 'comment_form_defaults', 't5_move_textarea' );
add_action( 'comment_form_top', 't5_move_textarea' );
/**
* Take the textarea code out of the default fields and print it on top.
*
* @param array $input Default fields if called as filter
* @return string|void
*/
function t5_move_textarea( $input = array () )
{
static $textarea = '';
if ( 'comment_form_defaults' === current_filter() )
{
// Copy the field to our internal variable …
$textarea = $input['comment_field'];
// … and remove it from the defaults array.
$input['comment_field'] = '';
return $input;
}
print apply_filters( 'comment_form_field_comment', $textarea );
}
J'ai aimé toscho répondre. Cependant, je voulais utiliser une zone de texte personnalisée pour que cela ne fonctionne pas dans ce cas. J'ai utilisé les mêmes crochets mais avec des fonctions séparées:
add_filter( 'comment_form_defaults', 'remove_textarea' );
add_action( 'comment_form_top', 'add_textarea' );
function remove_textarea($defaults)
{
$defaults['comment_field'] = '';
return $defaults;
}
function add_textarea()
{
echo '<p class="comment-form-comment"><textarea id="comment" name="comment" cols="60" rows="6" placeholder="write your comment here..." aria-required="true"></textarea></p>';
}
Il y a évidemment plusieurs façons d'accomplir cela. Par exemple, pour déplacer le champ de commentaire au bas du formulaire, utilisez le code suivant:
add_filter( 'comment_form_fields', 'move_comment_field' );
function move_comment_field( $fields ) {
$comment_field = $fields['comment'];
unset( $fields['comment'] );
$fields['comment'] = $comment_field;
return $fields;
}
Si vous souhaitez réorganiser tous les champs, désélectionnez-les. Remettez-les dans le tableau dans l'ordre dans lequel vous souhaitez les afficher. Simple droit?
J'ai pensé que j'exploiterais explicitement cette idée pour que le prochain noobie, comme moi, trouve cette page et ne trouve pas les réponses utiles.
Le code CSS exact pour le faire dépend de votre thème. Cependant, voici une solution:
#commentform {
display:table;
width:100%;
}
.comment-form-comment {
display: table-header-group;
}
Les méthodes d'affichage de table vous permettent de réorganiser des objets de hauteur arbitraire.
Plus d'infos: http://tanalin.com/fr/articles/css-block-order/
les champs od forme de commentaires sont dans le tableau $fields
dans fonction comment_form()
. Vous pouvez accéder au filtre comment_form_default_fields
et reorder the array.
Vous pouvez également vous connecter au filtre comment_form_defaults
et modifier les valeurs par défaut. laissez toutes les données dans un tableau et ne changez que la field
de le tableau avec vos champs personnalisés; inclure le code HTML.
la valeur par défaut si $ fields:
$fields = array(
'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
'<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>',
'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
'<input id="email" name="email" type="text" value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' /></p>',
'url' => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label>' .
'<input id="url" name="url" type="text" value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" /></p>',
);