Add this code to your theme’s functions.php file:
add_action( 'wp_insert_comment', 'wc_auto_approve_parent_review_on_admin_reply', 99, 2 );
function wc_auto_approve_parent_review_on_admin_reply( $comment_id, $comment_object ) {
// Ensure it's a reply (has a parent comment)
if ( $comment_object->comment_parent > 0 ) {
// Check if the user submitting the reply has moderation capabilities
if ( current_user_can( 'moderate_comments' ) ) {
// Get the parent comment object
$parent_comment = get_comment( $comment_object->comment_parent );
// Proceed only if parent comment exists
if ( $parent_comment ) {
// Check if the parent comment is linked to a 'product' post type
$parent_post_type = get_post_type( $parent_comment->comment_post_ID );
// Check if parent is a product review AND is currently unapproved ('0')
if ( $parent_post_type === 'product' && $parent_comment->comment_approved === '0' ) {
// Approve the parent comment
// Use wp_set_comment_status() for better compatibility/hooks
wp_set_comment_status( $parent_comment->comment_ID, 'approve' );
// Optional: Clean comment cache for the parent post if needed,
// though status change usually handles this.
// clean_comment_cache( $parent_comment->comment_ID );
}
}
}
}
}
Create a file named admin-comment-reply.js in your theme directory (theme/js/). and Paste the following jQuery code into that file:
jQuery(document).ready(function($) {
// Listen for successful AJAX requests within the document
$(document).ajaxSuccess(function(event, xhr, settings) {
if ( settings.data && typeof settings.data === 'string' && settings.data.includes('action=replyto-comment') ) {
const requestData = new URLSearchParams(settings.data);
const parentCommentId = requestData.get('comment_ID');
if ( parentCommentId ) {
// Find the parent comment's row element in the comment list table
// The row usually has an ID like 'comment-{id}'
const $parentCommentRow = $('#comment-' + parentCommentId);
if ($parentCommentRow.length) {
setTimeout(function() {
// Check if the row still has the 'unapproved' class
if ( $parentCommentRow.hasClass('unapproved') ) {
console.log('Admin reply successful, removing unapproved style from parent comment #' + parentCommentId); // For debugging
$parentCommentRow.removeClass('unapproved').css('backgroundColor', '');
}
}, 150); // 150ms delay, adjust if needed
}
} else {
console.log('Could not find parent comment ID in replyto-comment AJAX data.'); // For debugging
}
}
});
});
Enqueue the JS file for the Admin Area:
add_action( 'admin_enqueue_scripts', 'wc_enqueue_admin_comment_reply_script' );
function wc_enqueue_admin_comment_reply_script( $hook_suffix ) {
if ( 'edit-comments.php' === $hook_suffix ) { // May need to add checks for product edit pages too if applicable
// Adjust the path according to where you saved the JS file
$script_path = get_stylesheet_directory_uri() . '/js/admin-comment-reply.js';
$script_version = wp_get_theme()->get('Version'); // Use theme version for cache busting
wp_enqueue_script( 'wc-admin-comment-reply', $script_path, array('jquery', 'wp-ajax-response'), $script_version, true );
}
}