Action uncanny-automator

uap_save_pmp_membership_level

Fires after a membership level is saved in Paid Memberships Pro, providing access to related data.

add_action( 'uap_save_pmp_membership_level', $callback, 10, 4 );

Description

Fires after a Paid Memberships Pro membership level is saved. Developers can use this hook to perform custom actions when membership levels are created or updated, passing the membership ID, response data, user ID, and the trigger object.


Usage

add_action( 'uap_save_pmp_membership_level', 'your_function_name', 10, 4 );

Parameters

$membership_id (mixed)
This parameter represents the ID of the membership level being managed.
$r (mixed)
This parameter contains the ID of the membership level associated with the action.
$user_id (mixed)
This parameter likely contains an array or object with details about the membership level, possibly including its name, cost, or other related information.
$this (mixed)
This parameter contains the ID of the user who is associated with the membership action.

Examples

add_action( 'uap_save_pmp_membership_level', 'my_uap_save_pmp_membership_level_handler', 10, 4 );

/**
 * Handles the uap_save_pmp_membership_level action hook.
 *
 * This function is triggered when a Paid Memberships Pro membership level is saved
 * within Uncanny Automator. It can be used to perform custom actions based on
 * membership level changes.
 *
 * @param mixed $membership_id The ID of the membership level.
 * @param mixed $r             The result array from maybe_add_trigger_entry.
 * @param mixed $user_id       The ID of the user associated with the membership.
 * @param mixed $trigger_meta  The meta data related to the trigger.
 */
function my_uap_save_pmp_membership_level_handler( $membership_id, $r, $user_id, $trigger_meta ) {
    // For demonstration purposes, let's just log the details.
    // In a real-world scenario, you might update user meta,
    // send notifications, or integrate with other services.

    // Check if the $r parameter is valid and contains necessary data
    if ( is_array( $r ) && isset( $r['args'] ) && is_array( $r['args'] ) ) {
        // Example: If the membership level was successfully saved and completed
        if ( isset( $r['result'] ) && true === $r['result'] ) {
            // Get the membership level title from Uncanny Automator's internal data
            // This assumes the membership level title is available in $trigger_meta
            // You might need to adjust this based on how Uncanny Automator populates $trigger_meta
            $membership_level_title = isset( $trigger_meta['membership_level_title'] ) ? $trigger_meta['membership_level_title'] : 'Unknown Membership Level';

            error_log( sprintf(
                'Uncanny Automator: Paid Memberships Pro membership level saved. User ID: %d, Membership ID: %d, Membership Title: %s',
                $user_id,
                $membership_id,
                $membership_level_title
            ) );

            // You could also perform further actions here, like:
            // if ( $membership_id === 123 ) {
            //     // Do something specific for membership level ID 123
            // }

            // Example of updating user meta (ensure this is a real use case)
            // update_user_meta( $user_id, 'last_pmp_membership_level_saved', $membership_id );

        }
    }
}

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/integrations/paid-memberships-pro/triggers/pmp-membershipexpires.php:151
src/integrations/paid-memberships-pro/triggers/pmp-membershipcancel.php:175
src/integrations/paid-memberships-pro/triggers/pmp-membershippurch.php:144
uncanny-automator-pro/src/integrations/paid-memberships-pro/triggers/pmp-renewsmembership.php:159

public function pmpro_subscription_expired( $user_id, $membership_id ) {

		if ( empty( $user_id ) || empty( $membership_id ) ) {
			return;
		}

		if ( is_numeric( $membership_id ) ) {
			$recipes             = Automator()->get->recipes_from_trigger_code( $this->trigger_code );
			$required_membership = Automator()->get->meta_from_recipes( $recipes, $this->trigger_meta );
			$matched_recipe_ids  = array();

			//Add where option is set to Any membership
			foreach ( $recipes as $recipe_id => $recipe ) {
				foreach ( $recipe['triggers'] as $trigger ) {
					$trigger_id = $trigger['ID'];//return early for all memberships
					if ( - 1 === intval( $required_membership[ $recipe_id ][ $trigger_id ] ) ) {
						$matched_recipe_ids[] = array(
							'recipe_id'  => $recipe_id,
							'trigger_id' => $trigger_id,
						);

						break;
					}
				}
			}

			//Add where Membership ID is set for trigger
			foreach ( $recipes as $recipe_id => $recipe ) {
				foreach ( $recipe['triggers'] as $trigger ) {
					$trigger_id = $trigger['ID'];//return early for all memberships
					if ( (int) $required_membership[ $recipe_id ][ $trigger_id ] === (int) $membership_id ) {
						$matched_recipe_ids[] = array(
							'recipe_id'  => $recipe_id,
							'trigger_id' => $trigger_id,
						);
					}
				}
			}

			if ( ! empty( $matched_recipe_ids ) ) {
				foreach ( $matched_recipe_ids as $matched_recipe_id ) {
					$args   = array(
						'code'             => $this->trigger_code,
						'meta'             => $this->trigger_meta,
						'user_id'          => $user_id,
						'recipe_to_match'  => $matched_recipe_id['recipe_id'],
						'trigger_to_match' => $matched_recipe_id['trigger_id'],
						'ignore_post_id'   => true,
						'is_signed_in'     => true,
					);
					$result = Automator()->maybe_add_trigger_entry( $args, false );

					if ( $result ) {
						foreach ( $result as $r ) {
							if ( true === $r['result'] ) {
								do_action( 'uap_save_pmp_membership_level', $membership_id, $r['args'], $user_id, $this->trigger_meta );
								Automator()->maybe_trigger_complete( $r['args'] );
							}
						}
					}
				}
			}
		}

		return;
	}

Scroll to Top