This article contains PHP code and is intended for developers. We offer this code as a courtesy, but don't provide support for code customizations or 3rd party development.
This hook allows you to do something after a successful payment action. It is triggered for all actions that have a "payment created" event.
Usage
add_action( 'frm_payment_status_complete', 'function_name', 10, 2);
Parameters
- trigger (string) - the status of the payment
- entry_id (int) - The ID of the entry linked to the payment
- payment (object) - The payment information from the Formidable → Payments page
- Includes: receipt_id, invoice_id, sub_id, item_id, amount, status, action_id, paysys, created_at, begin_date, expire_date, and meta_value
Examples
Trigger an action on complete payment
Use this code example to target a specific payment action ID and send an email if payment is marked as complete.
add_action( 'frm_payment_status_complete', 'frm_trigger_action_payment_complete' );
function frm_trigger_action_payment_complete( $atts ) {
$target_action_id = 450; // change 450 to your payment action ID
if ( $atts['payment']->status == 'complete' && $target_action_id === (int) $atts['payment']->action_id ) {
$to = get_option( 'admin_email' );
$subject = 'Payment complete';
$body = 'Payment made for $' . $atts['payment']->amount;
$headers = array( 'Content-Type: text/html; charset=UTF-8' );
wp_mail( $to, $subject, $body, $headers );
}
}
Change user role on complete payment
Use this example to change the user role when the payment is completed. With a recurring payment, this hook will be fired each time a payment is completed.
add_action( 'frm_payment_status_complete', 'frm_change_the_role' );
function frm_change_the_role( $atts ) {
$new_role = 'contributor'; // change contributor to the new user role
$entry = isset( $atts['entry'] ) ? $atts['entry'] : $atts['payment']->item_id;
if ( is_numeric( $entry ) ) {
$entry = FrmEntry::getOne( $entry );
}
$user_id = $entry->user_id;
if ( ! empty( $user_id ) ) {
$user = get_userdata($user_id);
if ( ! $user ) {
return; //don't continue if user doesn't exist
}
$updated_user = (array) $user;
// Get the highest/primary role for this user
$user_roles = $user->roles;
$user_role = array_shift( $user_roles );
if ( $user_role == 'administrator' ) {
return; //make sure we don't downgrade any admins
}
$updated_user['role'] = $new_role;
wp_update_user( $updated_user );
}
}