Automatically Approve Comments in a Certain Post Category

Coding tutorial: How to automatically approve all comments made on posts in a specific category.

Mohmoh submitted a question about how to approve comments that are made on a post in a specific category:

I had used this code to automatically approve comments of a specific category but after the last update wordpress 4.4 this code not work:

add_filter( 'pre_option_comment_moderation', 'auto_aprove_posts_b' );
add_filter( 'pre_option_comment_whitelist', 'auto_aprove_posts_b' );

function auto_aprove_posts_b( $option ) {
    if( in_category( '20' ) )
        return 0;

    return $option;
}

do you know how to automatically approve comments in the posts of a specific category?

mohmoh

To do this in WordPress, you’d want to hook into the pre_comment_approved filter. This filter allows you to adjust the comment’s approval status before adding it to the database.

The filter accepts two parameters:

  1. $approved – The current approval status before you modify it. This is what we’ll be changing (under certain circumstances).
  2. $commentdata – An array of data about the comment, including the ID of the post it corresponds to. We’ll need to use this when checking the category the post is in.

The code for this is quite simple:

function auto_approve_comments_in_category( $approved, $commentdata ) {
	$cat_id = 10; // This needs to be the ID of the category you want to approve.
	
	// If the post being commented on is in our category, always approve the comment.
	if( in_category( $cat_id, $commentdata['comment_post_ID'] ) ) {
		return 1;
	}
	
	// Otherwise, return the original approval status.
	return $approved;
}

add_filter( 'pre_comment_approved' , 'auto_approve_comments_in_category' , '99', 2 );

If you want, you could use this same code for other applications. For example: automatically approving comments on one specific post. Here’s how that would look:

function auto_approve_comments_on_post( $approved, $commentdata ) {
	$post_id = 503; // This needs to be the ID of the post you want to approve comments on.
	
	// If the post being commented on is post ID 503, always approve the comments.
	if( $commentdata['comment_post_ID'] == $post_id ) {
		return 1;
	}
	
	// Otherwise, return the original approval status.
	return $approved;
}

add_filter( 'pre_comment_approved' , 'auto_approve_comments_on_post' , '99', 2 );
Photo of Ashley
I'm a 30-something California girl living in England (I fell in love with a Brit!). My three great passions are: books, coding, and fitness. more »

Don't miss my next post!

Sign up to get my blog posts sent directly to your inbox (plus exclusive store discounts!).

You might like these

Recent Posts

    Random Posts