如何重新排列COMMENT_FORM()中的字段

时间:2012-04-29 作者:jrutter

Im使用自定义过滤器更改字段,但不知道如何更改order 注释表单中字段的。

所需订单:

注释字段(第一个/顶部)名称

  • 电子邮件
  • 网站
    • 这是我当前使用的代码:

      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\');
      

    5 个回复
    最合适的回答,由SO网友:fuxia 整理而成

    这很简单。你只需要textarea 超出默认字段–过滤器\'comment_form_defaults\' – 并打印在动作上\'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
     * 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 );
    }
    

    SO网友:Josh C

    显然有很多方法可以实现这一点。例如,要将注释字段移动到表单底部,可以使用以下代码:

    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;
    }
    
    如果你想的话rearrange all the fields:

    取消所有字段的设置,将字段放回数组中,但in the order you want them displayed简单对吗?我想我应该把它明确地说出来,以便下一个像我这样的noobie找到这一页,却找不到有用的答案。

    SO网友:mantish

    我喜欢托肖的回答。然而,我想使用一个自定义的textarea,所以在这种情况下它不起作用。我使用了相同的挂钩,但有不同的功能:

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

    SO网友:Otto

    具体的CSS将取决于您的主题,但有一种方法:

    #commentform {
    display:table;
    width:100%;   
    }
    
    .comment-form-comment {
    display: table-header-group; 
    }
    
    表格显示方法允许您对任意高度的内容进行重新排序。

    更多信息:http://tanalin.com/en/articles/css-block-order/

    SO网友:bueltge

    字段od注释表单位于数组中$fields 在功能中comment_form(). 您可以在过滤器内部挂钩comment_form_default_fieldsreorder 阵列。

    您还可以在过滤器内部挂钩comment_form_defaults 并更改默认值;将所有数据保留在数组中,只更改field具有自定义字段的数组;包括html。

    默认的if$字段:

          $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>\',
          );
    

    结束

    相关推荐

    allow photo/video in comments

    我请求允许订阅者在评论中上传/嵌入照片或视频。如果有人知道现有的插件可以处理这个问题,我找不到任何合适的插件。我找到了一些代码示例来更改从注释中剥离出来的标签,这将允许嵌入,但我不确定这是否真的符合要求,并且需要更改为核心文件。