所需顺序:
注释字段(第一个/顶部)
名称
电子邮件
网站
这是我当前正在使用的代码:
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');
#1 楼
那很简单。您只需要从默认字段中取出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 );
}
#2 楼
显然,有许多方法可以实现这一目标。例如,要将注释字段移到表单的底部,您将使用如下代码: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;
}
如果要重新排列所有字段:
取消所有字段
将字段放回数组中,但是要按照您希望它们显示的顺序
简单吧?我想我会为下一个像我这样的下一个noobie明确地拼写出来,以找到此页面而不找到有用的答案。
#3 楼
我喜欢toscho的答案。但是我想使用自定义文本区域,因此在那种情况下不起作用。
我使用了相同的钩子,但是具有单独的功能:
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>';
}
评论
请注意,许多反垃圾邮件插件也正在更改文本区域。必须对此进行很好的测试-我在使用类似方法时遇到了严重问题。
– fuxia♦
2012年10月23日15:29
#4 楼
确切的CSS取决于您的主题,但是,这是一种方法:#commentform {
display:table;
width:100%;
}
.comment-form-comment {
display: table-header-group;
}
表显示方法可让您重新排列任意高度的东西。 >
更多信息:http://tanalin.com/zh-CN/articles/css-block-order/
评论
好主意奥托。使用flexbox可以实现类似的方法:
#commentform {display:flex; flex-flow:列; } .comment-form-comment {命令:-1; }。
–布莱恩·威利斯(Bryan Willis)
2015年12月3日,12:28
#5 楼
注释表单的字段位于函数$fields
中的数组comment_form()
中。您可以挂钩到过滤器comment_form_default_fields
并重新排列数组。还可以挂钩到过滤器
comment_form_defaults
并更改默认值;将所有数据保留在数组中,并使用您的自定义字段仅更改数组的field
;包括html。$ 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>',
);
评论
好的解决方案,但是如果您想更改3或4个字段的顺序怎么办?
–布拉德·道尔顿(Brad Dalton)
2014年7月27日在4:13
@BradDalton相同:首先删除所有字段内容,然后按所需顺序在comment_form_top中打印它们。
– fuxia♦
2014年7月27日在7:12
不知道自那时以来代码是否发生了变化,但对于4.0而言,似乎comment_form_before_fields比钩住comment_form_top更好。
–马克·卡普伦
2014-09-26 14:53
@MarkKaplun现在,我将所需的位置作为参数传递给类。 :)
– fuxia♦
2014-09-26 14:59