是否有用于将字段添加到“管理/评论”页面上的“评论框”表单的过滤器?
如果你是说inline 编辑或回复评论的表单wp-admin/edit-comments.php
, 然后
表单的输出使用wp_comment_reply()
它有一个同名的钩子,即。wp_comment_reply
, 您可以使用它返回自己的评论回复表单HTML。
然而,内联编辑是一种JavaScript功能,因此我只需使用JS向表单中添加自定义字段。
工作示例,下面是一个示例脚本,用于添加名为hidden_field
(已标记Hidden Field
) 以该形式:
jQuery( function ( $ ) {
// Append the field at the bottom of the inline form, above the submit
// button. Just customize the HTML, but ensure the selector is correct.
// ( i.e. I used [name="hidden_field"], so change it based on your HTML. )
$( \'#replysubmit\' ).before(
\'<p style="padding: 3px 0 2px 5px; clear: both">\' +
\'<label>Hidden Field:</label> \' +
\'<input name="hidden_field" />\' +
\'</p>\'
);
// Note: (window.)commentReply is defined by WordPress.
$( \'#the-comment-list\' ).on( \'click\', \'.comment-inline\', function() {
var $field = $( \'#replyrow input[name="hidden_field"]\' );
// If the Quick Edit button is clicked, set the field value to the
// current database value.
if ( \'edit-comment\' === commentReply.act ) {
$field.val( $( \'#hidden_field-\' + commentReply.cid ).val() );
} else {
// If the Reply button is clicked, then we empty the field.
$field.val( \'\' );
}
} );
// Submit the form when the Enter key is pressed.
$( \'#replyrow input[name="hidden_field"]\' ).on( \'keypress\', function( e ) {
if ( e.which == 13 ) {
commentReply.send();
e.preventDefault();
return false;
}
} );
} );
<将其保存到外部JS文件并将脚本加载到评论页面,例如通过
admin_enqueue_scripts
hook, like so:(确保
admin-comments
哪个加载
wp-admin/js/edit-comments.js
, 在依赖项列表中)
add_action( \'admin_enqueue_scripts\', \'my_admin_enqueue_scripts\' );
function my_admin_enqueue_scripts() {
if ( \'edit-comments\' === get_current_screen()->id ) {
wp_enqueue_script( \'my-script\', \'/path/to/the/script.js\',
array( \'admin-comments\' ) );
}
}
要保存该字段,例如作为注释元数据,可以使用
comment_post
和(您已经使用的)
edit_comment
挂钩。例如:
add_action( \'edit_comment\', \'my_save_comment_hidden_field\' ); // for the Quick Edit button
add_action( \'comment_post\', \'my_save_comment_hidden_field\' ); // for the Reply button
function my_save_comment_hidden_field( $comment_ID ) {
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) {
return;
}
if ( ! isset( $_POST[\'hidden_field\'] ) ||
! current_user_can( \'edit_comment\', $comment_ID )
) {
return;
}
$value = sanitize_text_field( $_POST[\'hidden_field\'] );
update_comment_meta( $comment_ID, \'hidden_field\', $value );
}
确保添加一个隐藏的输入,用于存储数据库中当前的字段值。但它不一定是
<input />
.. 你可以使用其他元素;重要的是,将值存储在某个位置,以便JS在编辑注释时,即单击;快速编辑;。
例如,我通过comment_text
hook:
add_filter( \'comment_text\', \'my_comment_text\', 10, 2 );
function my_comment_text( $comment_text, $comment ) {
$value = $comment ? get_comment_meta( $comment->comment_ID, \'hidden_field\', true ) : \'\';
$input = sprintf( \'<input type="hidden" id="hidden_field-%d" value="%s" />\',
$comment->comment_ID, esc_attr( $value ) );
return $comment_text . $input;
}