Cómo reorganizar los campos en comment_form ()

20

Estoy usando un filtro personalizado para cambiar los campos, pero no puedo averiguar cómo cambiar el orden de los campos en el formulario de comentarios.

Orden deseada:

  • campo de comentarios (primero / arriba)
  • nombre
  • correo electrónico
  • sitio web

Este es el código que estoy usando actualmente:

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

5 respuestas

12

Eso es bastante simple. Solo tiene que quitar el textarea de los campos predeterminados, filtrar 'comment_form_defaults' , e imprimirlo en la acción '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 <info@toscho.de>
 * 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 );
}
    
respondido por el fuxia 30.04.2012 - 00:32
4

Me gustó toscho la respuesta. Sin embargo, quería usar un área de texto personalizada, por lo que no funcionó en ese caso. Usé los mismos ganchos pero con funciones separadas:

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>';
}
    
respondido por el mantish 23.10.2012 - 16:38
3

Obviamente hay varias formas de lograr esto. Por ejemplo, para mover el campo de comentarios al final del formulario, usaría un código como este:

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 desea reorganizar todos los campos, cancele todos los campos. Vuelva a colocarlos en la matriz en el orden en que desea que se muestren. Simple, ¿verdad?

Me di cuenta de que lo deletrearía explícitamente para el próximo Noobie como yo para encontrar esta página y no encontrar las respuestas útiles.

    
respondido por el Josh C 20.02.2016 - 18:11
2

El CSS exacto para hacer esto dependerá de tu tema, sin embargo, aquí hay una forma:

#commentform {
display:table;
width:100%;   
}

.comment-form-comment {
display: table-header-group; 
}

Los métodos de visualización de la tabla te permiten reordenar cosas de altura arbitraria.

Más información: enlace

    
respondido por el Otto 30.04.2012 - 01:40
1

los campos del formulario de comentarios están en la matriz $fields en la función comment_form() . Puede enlazar dentro del filtro comment_form_default_fields y reordenar la matriz.

También puede enganchar dentro del filtro comment_form_defaults y cambiar los valores predeterminados; deje todos los datos en la matriz y cambie solo el field de la matriz con sus campos personalizados; incluir el html.

el valor predeterminado 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>',
      );
    
respondido por el bueltge 30.04.2012 - 00:29

Lea otras preguntas en las etiquetas