apply_filters(‘preprocess_comment’, array $commentdata) is a WordPress PHP filter that modifies a comment’s data before it gets sanitized and inserted into the database.
Usage
To use this filter, create a custom function that modifies the $commentdata
array and hook it to the filter with the add_filter
function.
function custom_preprocess_comment($commentdata) { // Modify $commentdata here return $commentdata; } add_filter('preprocess_comment', 'custom_preprocess_comment');
Parameters
- $commentdata (array): An array containing the comment data.
The $commentdata array contains the following keys:
- ‘comment_post_ID’: The post to which the comment will apply.
- ‘comment_author’: (may be empty)
- ‘comment_author_email’: (may be empty)
- ‘comment_author_url’: (may be empty)
- ‘comment_content’: The text of the proposed comment.
- ‘comment_type’: ‘pingback’, ‘trackback’, or empty for regular comments.
- ‘user_ID’: (empty if not logged in)
Examples
Adding a prefix to comment author names
function prefix_comment_author($commentdata) { $commentdata['comment_author'] = 'Guest: ' . $commentdata['comment_author']; return $commentdata; } add_filter('preprocess_comment', 'prefix_comment_author');
This function adds the prefix “Guest: ” to the comment author’s name before saving the comment.
Moderate comments containing certain keywords
function moderate_keywords_in_comments($commentdata) { $keywords = array('badword1', 'badword2', 'badword3'); foreach ($keywords as $keyword) { if (strpos($commentdata['comment_content'], $keyword) !== false) { $commentdata['comment_approved'] = 0; break; } } return $commentdata; } add_filter('preprocess_comment', 'moderate_keywords_in_comments');
This function checks if the comment contains any of the specified keywords. If so, it sets the comment as unapproved.
Converting URLs in comments to hyperlinks
function convert_urls_to_links($commentdata) { $commentdata['comment_content'] = preg_replace( '/(http|https|ftp|ftps)://[a-zA-Z0-9-.]+.[a-zA-Z]{2,3}(/S*)?/', '<a href="$0" target="_blank">$0</a>', $commentdata['comment_content'] ); return $commentdata; } add_filter('preprocess_comment', 'convert_urls_to_links');
This function converts URLs in the comment content to clickable hyperlinks before saving the comment.
Limiting comment length
function limit_comment_length($commentdata) { $maxLength = 500; if (strlen($commentdata['comment_content']) > $maxLength) { $commentdata['comment_content'] = substr($commentdata['comment_content'], 0, $maxLength); } return $commentdata; } add_filter('preprocess_comment', 'limit_comment_length');
This function limits the comment length to a specified maximum length before saving the comment.
Removing HTML tags from comments
function remove_html_from_comments($commentdata) { $commentdata['comment_content'] = strip_tags($commentdata['comment_content']); return $commentdata; } add_filter('preprocess_comment', 'remove_html_from_comments');
This function removes all HTML tags from the comment content before saving the comment.
Replacing specific words with alternatives
function replace_words_in_comments($commentdata) { $word_replacements = array( 'oldword1' => 'newword1', 'oldword2' => 'newword2', 'oldword3' => 'newword3' ); $commentdata['comment_content'] = str_replace(array_keys($word_replacements), array_values($word_replacements), $commentdata['comment_content']); return $commentdata; } add_filter('preprocess_comment', 'replace_words_in_comments');
This function replaces specific words in the comment content with their alternatives before saving the comment.
Adding a custom message to comments by logged-in users
function add_message_for_logged_in_users($commentdata) { if (!empty($commentdata['user_ID'])) { $commentdata['comment_content'] .= "nnMessage: This comment was submitted by a registered user."; } return $commentdata; } add_filter('preprocess_comment', 'add_message_for_logged_in_users');
This function appends a custom message to the comments submitted by logged-in users before saving the comment.
Converting all-caps text to lowercase in comments
function convert_all_caps_to_lowercase($commentdata) { if (strtoupper($commentdata['comment_content']) == $commentdata['comment_content']) { $commentdata['comment_content'] = strtolower($commentdata['comment_content']); } return $commentdata; } add_filter('preprocess_comment', 'convert_all_caps_to_lowercase');
This function converts comments written in all-caps to lowercase before saving the comment.
Adding a timestamp to comment content
function add_timestamp_to_comments($commentdata) { $timestamp = date('Y-m-d H:i:s'); $commentdata['comment_content'] .= "nnSubmitted on: $timestamp"; return $commentdata; } add_filter('preprocess_comment', 'add_timestamp_to_comments');
This function appends the current timestamp to the comment content before saving the comment.
Restricting comments to specific languages
function restrict_comments_to_languages($commentdata) { $allowed_languages = array('en', 'es', 'fr'); $detected_language = detect_comment_language($commentdata['comment_content']); // Assuming a custom function to detect the comment's language if (!in_array($detected_language, $allowed_languages)) { $commentdata['comment_approved'] = 0; } return $commentdata; } add_filter('preprocess_comment', 'restrict_comments_to_languages');
This function checks if the comment’s language is in the allowed languages list. If not, it sets the comment as unapproved.