web-dev-qa-db-fra.com

Comment réorganiser les champs dans comment_form ()

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é:

  • champ de commentaire (premier/haut)
  • prénom
  • email
  • site Internet

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');
21
jrutter

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 );
}
12
fuxia

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>';
}
4
mantish

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.

3
Josh C

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/

2
Otto

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 fieldde 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>',
      );
1
bueltge