J'utilise comment_form (); dans le fichier loop-single.php pour afficher le formulaire de commentaire. J'ai les champs suivants: Nom, Email, Site Web, Titre, Commentaire. Actuellement, tous ces champs de formulaire s'affichent l'un en dessous de l'autre. J'ai essayé de modifier le formulaire de manière à ce que toutes les valeurs de zone de texte apparaissent dans la colonne de gauche et que seul le texte apparaît dans la colonne de droite.
J'ai essayé d'utiliser comment_notes_after, comment_notes_before, comment_form_top, etc. jusqu'à présent, mais cela n'a pas abouti. Alors, comment puis-je y parvenir (tout code de travail sera grandement apprécié)?
Vous avez besoin de deux nouveaux conteneurs: un pour les champs de ligne unique, un pour les zones de texte. En regardant le formulaire de commentaire par défaut, nous pouvons voir où leurs balises de début et de fin doivent apparaître. J'ai ajouté quelques commentaires pour que cela soit plus facile à voir:
<form action="<?php echo site_url( '/wp-comments-post.php' ); ?>" method="post" id="<?php echo esc_attr( $args['id_form'] ); ?>">
<?php do_action( 'comment_form_top' ); ?>
<?php if ( is_user_logged_in() ) : ?>
<?php echo apply_filters( 'comment_form_logged_in', $args['logged_in_as'], $commenter, $user_identity ); ?>
<?php do_action( 'comment_form_logged_in_after', $commenter, $user_identity ); ?>
<?php else : ?>
<?php echo $args['comment_notes_before']; ?>
<?php
do_action( 'comment_form_before_fields' );
// Fields: author, email, url
foreach ( (array) $args['fields'] as $name => $field ) {
echo apply_filters( "comment_form_field_{$name}", $field ) . "\n";
}
do_action( 'comment_form_after_fields' );
?>
<?php endif; ?>
<?php
// Field: textarea
echo apply_filters( 'comment_form_field_comment', $args['comment_field'] ); ?>
<?php echo $args['comment_notes_after']; ?>
<p class="form-submit">
<input name="submit" type="submit" id="<?php echo esc_attr( $args['id_submit'] ); ?>" value="<?php echo esc_attr( $args['label_submit'] ); ?>" />
<?php comment_id_fields( $post_id ); ?>
</p>
<?php do_action( 'comment_form', $post_id ); ?>
</form>
'comment_form_top'
. Pas plus tard, car nous devons intercepter le cas d'un utilisateur connecté.'comment_form_after_fields'
.'comment_form_field_comment'
. Celui-ci est un filtre, pas une action.Dans l'exemple de code suivant, je jette un élément style
dans le balisage. Dans votre thème, vous devriez mettre le CSS dans la feuille de style. Et vous devriez utiliser un gestionnaire de clearfix de votre choix, pas le balisage que j'ai utilisé ici. :)
add_action( 'comment_form_top', 'wpse_67805_open_tag' );
function wpse_67805_open_tag()
{
?>
<style>
@media screen and (min-width: 800px) {
.wpse-67805-comment-fields,
.logged-in-as {
float: left;
width: 280px;
}
.wpse-67805-comment-textarea {
float: right;
width: 280px;
}
.wpse-67805-textarea-after {
clear: both;
}
}
</style>
<div class="wpse-67805-comment-fields">
<?php
}
add_action( 'comment_form_after_fields', 'wpse_67805_open_close_tag' );
add_action( 'comment_form_logged_in_after', 'wpse_67805_open_close_tag' );
function wpse_67805_open_close_tag()
{
?></div><div class="wpse-67805-comment-textarea"><?php
}
add_filter( 'comment_form_field_comment', 'wpse_67805_close_tag' );
function wpse_67805_close_tag( $textarea )
{
return "$textarea</div><div class='wpse-67805-textarea-after'></div>";
}
Pas vraiment beau, il faut ajuster le CSS. Mais la voie générale devrait être claire maintenant.