Is there a filter for the adding of fields to the comment box form
that is on the admin/comments page?
If you meant the inline form for editing or replying to a comment at wp-admin/edit-comments.php
, then,
-
The form is outputted using
wp_comment_reply()
which has a hook with the same name, i.e.wp_comment_reply
, and you could use that to return your own comment reply form HTML. -
However, the inline editing is a JavaScript feature, hence I would simply use JS to add custom fields to that form.
Working Example
So here’s a sample script for adding a field named hidden_field
(labeled Hidden Field
) to that form:
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;
}
} );
} );
-
Save it to an external JS file and load the script on the comments page, e.g. via the
admin_enqueue_scripts
hook, like so: ( make sureadmin-comments
which loadswp-admin/js/edit-comments.js
, is in the dependencies list )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' ) ); } }
-
To save the field, e.g. as a comment metadata, you can use the
comment_post
and (the one you already using)edit_comment
hooks. For example: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 ); }
-
Make sure to add a hidden input which stores the field value that’s currently in the database. But it does not have to be an
<input />
.. you could just use other element; what’s important is, store the value somewhere so that JS can get the value and update the field value in the inline form when editing a comment, i.e. after clicking on “Quick Edit”.So for example, I added the hidden input via the
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; }