pre_comment_approved is a WordPress PHP filter that lets you modify a comment’s approval status before it’s set in the database.
Usage
add_filter('pre_comment_approved', 'your_custom_function', 10, 2);
function your_custom_function($approved, $commentdata) {
// your custom code here
return $approved;
}
Parameters
- $approved (int|string|WP_Error) – The approval status. Accepts 1 (approved), 0 (pending), ‘spam’, ‘trash’, or WP_Error.
- $commentdata (array) – An array containing comment data.
More information
See WordPress Developer Resources: pre_comment_approved
Examples
Automatically approve comments from a specific email
Automatically approve comments from an email address you trust.
add_filter('pre_comment_approved', 'auto_approve_specific_email', 10, 2);
function auto_approve_specific_email($approved, $commentdata) {
if ($commentdata['comment_author_email'] == '[email protected]') {
return 1;
}
return $approved;
}
Reject comments containing specific words
Reject comments that contain specific words and send them to the trash.
add_filter('pre_comment_approved', 'reject_specific_words', 10, 2);
function reject_specific_words($approved, $commentdata) {
$bad_words = array('spamword1', 'spamword2', 'spamword3');
foreach ($bad_words as $word) {
if (stripos($commentdata['comment_content'], $word) !== false) {
return 'trash';
}
}
return $approved;
}
Mark short comments as spam
Mark comments shorter than a specific length as spam.
add_filter('pre_comment_approved', 'short_comments_as_spam', 10, 2);
function short_comments_as_spam($approved, $commentdata) {
if (strlen($commentdata['comment_content']) < 50) {
return 'spam';
}
return $approved;
}
Set all comments as pending
Set all new comments to pending approval status.
add_filter('pre_comment_approved', 'set_all_comments_pending', 10, 2);
function set_all_comments_pending($approved, $commentdata) {
return 0;
}
Disallow comments with links
Disallow comments that contain any links and send them to the trash.
add_filter('pre_comment_approved', 'disallow_comments_with_links', 10, 2);
function disallow_comments_with_links($approved, $commentdata) {
if (preg_match('/(http|https):\/\/[^\s]+/', $commentdata['comment_content'])) {
return 'trash';
}
return $approved;
}