The register_post WordPress PHP action fires when submitting registration form data, before the user is created.
Usage
add_action('register_post', 'your_custom_function', 10, 3);
function your_custom_function($sanitized_user_login, $user_email, $errors) {
// your custom code here
}
Parameters
$sanitized_user_login(string): The submitted username after being sanitized.$user_email(string): The submitted email.$errors(WP_Error): Contains any errors with submitted username and email, such as an empty field, an invalid username or email, or an existing username or email.
More information
See WordPress Developer Resources: register_post
Examples
Validate custom registration fields
add_action('register_post', 'validate_custom_fields', 10, 3);
function validate_custom_fields($sanitized_user_login, $user_email, $errors) {
// Validate a custom field (e.g., "company_name")
if (empty($_POST['company_name'])) {
$errors->add('company_name_error', __('Please enter your company name.'));
}
}
Set user role based on a custom field
add_action('register_post', 'set_user_role', 10, 3);
function set_user_role($sanitized_user_login, $user_email, $errors) {
// Check if the user selected a specific role (e.g., "editor")
if (isset($_POST['user_role']) && $_POST['user_role'] == 'editor') {
// Add a custom meta key to store the user's role
update_user_meta($user_id, 'user_role', 'editor');
}
}
Send a custom email to the admin after registration
add_action('register_post', 'send_custom_email_to_admin', 10, 3);
function send_custom_email_to_admin($sanitized_user_login, $user_email, $errors) {
// Check if there are no errors
if (empty($errors->errors)) {
$admin_email = get_option('admin_email');
$subject = 'New user registration';
$message = 'A new user has registered. Username: ' . $sanitized_user_login . ', Email: ' . $user_email;
wp_mail($admin_email, $subject, $message);
}
}
Check for specific email domain during registration
add_action('register_post', 'validate_email_domain', 10, 3);
function validate_email_domain($sanitized_user_login, $user_email, $errors) {
// Check if the email domain is allowed
$allowed_email_domains = array('example.com', 'example.org');
$email_domain = substr(strrchr($user_email, "@"), 1);
if (!in_array($email_domain, $allowed_email_domains)) {
$errors->add('email_domain_error', __('Please use an allowed email domain.'));
}
}
Store user’s IP address on registration
add_action('register_post', 'store_user_ip', 10, 3);
function store_user_ip($sanitized_user_login, $user_email, $errors) {
// Get user's IP address
$user_ip = $_SERVER['REMOTE_ADDR'];
// Store user's IP address in a custom meta key
update_user_meta($user_id, 'registration_ip', $user_ip);
}