wake-up-neo.com

Felder in comment_form () neu anordnen

Ich benutze einen benutzerdefinierten Filter, um die Felder zu ändern, kann aber nicht herausfinden, wie die Reihenfolge der Felder im Kommentarformular geändert werden kann.

Gewünschte Bestellung:

  • kommentarfeld (zuerst/oben)
  • name
  • email
  • webseite

Dies ist der Code, den ich derzeit verwende:

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

Das ist ziemlich einfach. Sie müssen nur die textarea aus den Standardfeldern herausnehmen - filter 'comment_form_defaults' - und sie auf die Aktion 'comment_form_top' drucken:

<?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

Ich mochte es, zu antworten. Ich wollte jedoch ein benutzerdefiniertes Textfeld verwenden, sodass es in diesem Fall nicht funktionierte. Ich habe die gleichen Haken verwendet, aber mit separaten Funktionen:

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

Es gibt offensichtlich eine Reihe von Möglichkeiten, um dies zu erreichen. Um beispielsweise das Kommentarfeld an den unteren Rand des Formulars zu verschieben, verwenden Sie folgenden Code:

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;
}

Wenn Sie alle Felder neu anordnen möchten, deaktivieren Sie alle Felder. Fügen Sie sie wieder in der Reihenfolge in das Array ein, in der sie angezeigt werden sollen. Einfach richtig?

Ich dachte mir, ich würde es ausdrücklich so formulieren, dass der nächste Neuling wie ich diese Seite findet und die Antworten nicht nützlich sind.

3
Josh C

Das genaue CSS hierfür hängt von Ihrem Thema ab. Hier ist jedoch eine Möglichkeit:

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

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

Mit den Methoden zur Tabellendarstellung können Sie Elemente beliebiger Höhe neu anordnen.

Weitere Informationen: http://tanalin.com/de/articles/css-block-order/

2
Otto

die Felder od Kommentarform befinden sich im Array $fields in der Funktion comment_form() . Sie können den Filter comment_form_default_fields einbinden und das Array neu anordnen .

Sie können auch in den Filter comment_form_defaults einbinden und die Standardeinstellungen ändern. Lassen Sie alle Daten im Array und ändern Sie nur die field des Arrays mit Ihren benutzerdefinierten Feldern. Fügen Sie das HTML hinzu.

die Standardeinstellung wenn $ Felder:

      $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