ulc_user_redeemed_code
Fires after a user successfully redeems a coupon code, providing details about the user, coupon, and redemption result.
add_action( 'ulc_user_redeemed_code', $callback, 10, 3 );
Description
Fires after a user successfully redeems a code. Developers can use this hook to perform custom actions, like granting additional privileges, sending notifications, or updating user metadata based on the redeemed coupon. It provides the new user ID, coupon ID, redemption result, and the source of redemption.
Usage
add_action( 'ulc_user_redeemed_code', 'your_function_name', 10, 3 );
Parameters
-
$new_user_id(mixed) - The ID of the newly registered user who redeemed the coupon.
-
$coupon_id(mixed) - The ID of the newly registered user who redeemed the code.
-
$result(mixed) - This parameter contains the ID of the coupon that was redeemed.
Examples
<?php
/**
* Example of how to hook into the ulc_user_redeemed_code action.
* This function logs details about a user redeeming a code,
* and potentially updates user meta or sends notifications.
*
* @param int $new_user_id The ID of the newly created or existing user.
* @param int $coupon_id The ID of the coupon code that was redeemed.
* @param array $result An array containing the result of the redemption process.
* This might include 'status' (e.g., 'success', 'error'), 'message'.
* @param string $source The context from which the redemption occurred (e.g., 'shortcode', 'gravity-forms').
*/
add_action( 'ulc_user_redeemed_code', function ( $new_user_id, $coupon_id, $result, $source ) {
// Basic validation to ensure we have a user ID and coupon ID.
if ( ! $new_user_id || ! is_numeric( $new_user_id ) || ! $coupon_id || ! is_numeric( $coupon_id ) ) {
error_log( 'Uncanny LearnDash Codes: Invalid user ID or coupon ID passed to ulc_user_redeemed_code hook.' );
return;
}
// Get user object for more details.
$user = get_user_by( 'id', $new_user_id );
if ( ! $user ) {
error_log( 'Uncanny LearnDash Codes: User not found for ID ' . $new_user_id . ' in ulc_user_redeemed_code hook.' );
return;
}
// Get coupon details.
$coupon = get_post( $coupon_id );
if ( ! $coupon || 'uncanny_code' !== $coupon->post_type ) {
error_log( 'Uncanny LearnDash Codes: Coupon not found or invalid type for ID ' . $coupon_id . ' in ulc_user_redeemed_code hook.' );
return;
}
// Log the redemption event.
$log_message = sprintf(
'User "%s" (ID: %d) redeemed coupon "%s" (ID: %d) from source "%s". Result: %s.',
$user->user_login,
$new_user_id,
$coupon->post_title,
$coupon_id,
esc_html( $source ),
isset( $result['message'] ) ? esc_html( $result['message'] ) : 'N/A'
);
error_log( 'Uncanny LearnDash Codes: ' . $log_message );
// Example: Add meta data to the user upon successful redemption.
if ( isset( $result['status'] ) && 'success' === $result['status'] ) {
update_user_meta( $new_user_id, 'uncanny_code_last_redeemed_coupon_id', $coupon_id );
update_user_meta( $new_user_id, 'uncanny_code_last_redeemed_timestamp', time() );
// Example: Trigger a notification email to the user (requires a separate email sending function).
// You might use wp_mail() or a more sophisticated email system.
// $email_subject = 'Your Coupon Code Has Been Redeemed!';
// $email_body = 'Congratulations! You have successfully redeemed the coupon code "' . $coupon->post_title . '".';
// wp_mail( $user->user_email, $email_subject, $email_body );
}
}, 10, 4 ); // Priority 10, accepts 4 arguments.
?>
Placement
This code should be placed in the functions.php file of your active theme, a custom plugin, or using a code snippets plugin.
Source Code
src/classes/helpers/class-shortcodes.php:320
src/classes/helpers/class-shortcodes.php:517
src/classes/integrations/theme-my-login/class-theme-my-login.php:115
src/classes/integrations/gravity-forms/class-gravity-forms.php:194
src/classes/integrations/gravity-forms/class-gravity-forms.php:255
src/classes/integrations/wpforms/class-wpforms.php:87
src/classes/integrations/wpforms/class-wpforms.php:125
src/classes/integrations/gravity-forms/class-gravity-forms-code-field.php:39
src/classes/integrations/gravity-forms/class-gravity-forms-code-field.php:164
src/classes/integrations/gravity-forms/class-gravity-forms-code-field.php:222
src/classes/integrations/forminator/class-forminator-codes-field.php:121
src/classes/integrations/woocommerce/class-woocommerce.php:356
src/classes/integrations/formidable/class-formidable.php:136
src/classes/integrations/fluent-forms/class-ff-code-redemption.php:110
public static function uncanny_learndash_codes_add_new_member() {
if ( ! SharedFunctionality::ulc_filter_has_var( '_uo_nonce', INPUT_POST ) ) {
return;
}
if ( ! wp_verify_nonce( SharedFunctionality::ulc_filter_input( '_uo_nonce', INPUT_POST ), Config::get_project_name() ) ) {
wp_die( 'Invalid Request' );
}
$user_login = sanitize_user( SharedFunctionality::ulc_filter_input( 'uncanny-learndash-codes-user_email', INPUT_POST ), false );
$user_email = sanitize_email( SharedFunctionality::ulc_filter_input( 'uncanny-learndash-codes-user_email', INPUT_POST ) );
$user_first = esc_attr( sanitize_text_field( SharedFunctionality::ulc_filter_input( 'uncanny-learndash-codes-user_first', INPUT_POST ) ) );
$user_last = esc_attr( sanitize_text_field( SharedFunctionality::ulc_filter_input( 'uncanny-learndash-codes-user_last', INPUT_POST ) ) );
$user_pass = esc_attr( SharedFunctionality::ulc_filter_input( 'uncanny-learndash-codes-user_pass', INPUT_POST ) );
$pass_confirm = esc_attr( SharedFunctionality::ulc_filter_input( 'uncanny-learndash-codes-user_pass_confirm', INPUT_POST ) );
$code_registration = esc_attr( SharedFunctionality::ulc_filter_input( 'uncanny-learndash-codes-code_registration', INPUT_POST ) );
$redirect_to = esc_url( SharedFunctionality::ulc_filter_input( 'redirect_to', INPUT_POST ) );
$default = array(
'redirect' => '',
'code_optional' => 'no',
'auto_login' => 'yes',
'role' => 'subscriber',
);
if ( is_multisite() ) {
$options = get_blog_option( get_current_blog_id(), 'uncanny-codes-custom-registration-atts', $default );
} else {
$options = get_option( 'uncanny-codes-custom-registration-atts', $default );
}
if ( username_exists( $user_login ) ) {
// Username already registered.
self::uncanny_learndash_codes_errors()
->add( 'username_unavailable', esc_html__( 'Username already taken', 'uncanny-learndash-codes' ) );
}
if ( ! validate_username( $user_login ) ) {
// invalid username.
self::uncanny_learndash_codes_errors()
->add( 'username_invalid', esc_html__( 'Invalid username', 'uncanny-learndash-codes' ) );
}
if ( '' === $user_login ) {
// empty username.
self::uncanny_learndash_codes_errors()
->add( 'username_empty', esc_html__( 'Please enter a username', 'uncanny-learndash-codes' ) );
}
if ( ! is_email( $user_email ) ) {
// invalid email.
self::uncanny_learndash_codes_errors()
->add( 'email_invalid', esc_html__( 'Invalid email', 'uncanny-learndash-codes' ) );
}
if ( email_exists( $user_email ) ) {
// Email address already registered.
self::uncanny_learndash_codes_errors()
->add( 'email_used', esc_html__( 'Email already registered', 'uncanny-learndash-codes' ) );
}
if ( '' === $user_pass ) {
// passwords do not match.
self::uncanny_learndash_codes_errors()
->add( 'password_empty', esc_html__( 'Please enter a password', 'uncanny-learndash-codes' ) );
}
if ( $pass_confirm !== $user_pass ) {
// passwords do not match.
self::uncanny_learndash_codes_errors()
->add( 'password_mismatch', esc_html__( 'Passwords do not match', 'uncanny-learndash-codes' ) );
}
if ( '' === $code_registration && 'yes' !== $options['code_optional'] ) {
self::uncanny_learndash_codes_errors()
->add( 'code_empty', esc_html__( 'Registration Code is empty', 'uncanny-learndash-codes' ) );
} elseif ( ! empty( $code_registration ) ) {
$coupon_id = SharedFunctionality::maybe_validate_coupon_code( $code_registration );
if ( ! is_numeric( $coupon_id ) ) {
self::uncanny_learndash_codes_errors()
->add( 'codes_error', $coupon_id );
} else {
self::$coupon_id = intval( $coupon_id );
}
}
// }