Comment réorganiser les champs dans comment_form ()

20

J'utilise un filtre personnalisé pour modifier les champs, mais je ne vois pas comment changer la commande des champs dans le formulaire de commentaire.

Ordre souhaité:

  • champ de commentaire (premier / haut)
  • nom
  • email
  • site web

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');
    
posée jrutter 29.04.2012 - 21:33

5 réponses

12

C'est assez simple. Vous devez simplement extraire le textarea des champs par défaut - filtrer '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 );
}
    
réponse donnée fuxia 30.04.2012 - 00:32
4

J'ai aimé la réponse toscho. 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 distinctes:

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>';
}
    
réponse donnée mantish 23.10.2012 - 16:38
3

Il existe évidemment un certain nombre de moyens pour y parvenir. Par exemple, pour déplacer le champ de commentaire au bas du formulaire, utilisez un code comme celui-ci:

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?

Je me suis dit que je devrais le préciser clairement pour le prochain noobie, comme moi, pour trouver cette page et ne pas trouver les réponses utiles.

    
réponse donnée Josh C 20.02.2016 - 18:11
2

Le code CSS exact à utiliser 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 la table vous permettent de réorganiser les objets de hauteur arbitraire.

Plus d'infos: enlace

    
réponse donnée Otto 30.04.2012 - 01:40
1

les champs du formulaire de commentaire sont dans le tableau $fields de la fonction comment_form() . Vous pouvez accéder au filtre comment_form_default_fields et au réorganiser le tableau.

Vous pouvez également vous connecter au filtre comment_form_defaults et modifier les valeurs par défaut. laissez toutes les données dans le tableau et ne modifiez que le field du 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>',
      );
    
réponse donnée bueltge 30.04.2012 - 00:29

Lire d'autres questions sur les étiquettes