The pre_comment_user_ip filter allows you to modify the comment author’s IP address before it is saved to the WordPress database.
Usage
add_filter('pre_comment_user_ip', 'your_custom_function_name');
function your_custom_function_name($comment_author_ip) {
// Your custom code here
return $comment_author_ip;
}
Parameters
$comment_author_ip (string): The comment author’s IP address.
More information
See WordPress Developer Resources: pre_comment_user_ip
Examples
Remove the last IP in X-Forwarded-For header
In this example, we will remove the last IP address from the X-Forwarded-For header.
add_filter('pre_comment_user_ip', 'remove_last_ip_x_forwarded_for');
function remove_last_ip_x_forwarded_for($comment_author_ip) {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip_list = explode(', ', $_SERVER['HTTP_X_FORWARDED_FOR']);
array_pop($ip_list);
$comment_author_ip = implode(', ', $ip_list);
}
return $comment_author_ip;
}
Use the first IP in X-Forwarded-For header
In this example, we will use the first IP address from the X-Forwarded-For header as the comment author’s IP.
add_filter('pre_comment_user_ip', 'use_first_ip_x_forwarded_for');
function use_first_ip_x_forwarded_for($comment_author_ip) {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip_list = explode(', ', $_SERVER['HTTP_X_FORWARDED_FOR']);
$comment_author_ip = $ip_list[0];
}
return $comment_author_ip;
}
Use a custom function to retrieve the client’s IP
In this example, we will use a custom function to retrieve the client’s IP address from different server variables.
add_filter('pre_comment_user_ip', 'get_client_ip');
function get_client_ip($comment_author_ip) {
$ip_sources = array(
'HTTP_CLIENT_IP',
'HTTP_X_FORWARDED_FOR',
'HTTP_X_FORWARDED',
'HTTP_FORWARDED_FOR',
'HTTP_FORWARDED',
'REMOTE_ADDR'
);
foreach ($ip_sources as $source) {
if (isset($_SERVER[$source])) {
return $_SERVER[$source];
}
}
return $comment_author_ip;
}
Anonymize IP address
In this example, we will anonymize the comment author’s IP address by removing the last octet.
add_filter('pre_comment_user_ip', 'anonymize_ip');
function anonymize_ip($comment_author_ip) {
$ip_parts = explode('.', $comment_author_ip);
array_pop($ip_parts);
$anonymized_ip = implode('.', $ip_parts) . '.0';
return $anonymized_ip;
}
Use the Forwarded header
In this example, we will use the Forwarded header to obtain the client’s IP address.
add_filter('pre_comment_user_ip', 'use_forwarded_header');
function use_forwarded_header($comment_author_ip) {
if (isset($_SERVER['HTTP_FORWARDED'])) {
preg_match('/for=([^;]+)/', $_SERVER['HTTP_FORWARDED'], $matches);
if (isset($matches[1])) {
$comment_author_author_ip = $matches[1];
}
}
return $comment_author_ip;
}