Skip to content

Instantly share code, notes, and snippets.

@JarrydLong
Forked from gausam/pmpro-customizations.php
Last active October 21, 2020 07:24
Show Gist options
  • Save JarrydLong/e5099975695ae5dce89674586ca4626f to your computer and use it in GitHub Desktop.
Save JarrydLong/e5099975695ae5dce89674586ca4626f to your computer and use it in GitHub Desktop.
Allow users to use the trial level only once.
<?php
/*
Plugin Name: PMPro Customizations
Plugin URI: https://www.paidmembershipspro.com/wp/pmpro-customizations/
Description: Customizations for my Paid Memberships Pro Setup
Version: .1
Author: Paid Memberships Pro
Author URI: https://www.paidmembershipspro.com
*/
/*
Only allow users to use the trial level once.
Add this code to your active theme’s functions.php
or a custom plugin.
Be sure to change the $trial_level_id variable in multiple places.
*/
//record when users gain the trial level
function my_pmpro_after_change_membership_level($level_id, $user_id) {
//set this to the id of your trial level
$trial_level_id = array(
3,
4
);
if( in_array( $level_id, $trial_level_id ) ) {
//add user meta to record the fact that this user has had this level before
update_user_meta( $user_id, "pmpro_trial_level_used", "1" );
}
}
add_action( "pmpro_after_change_membership_level", "my_pmpro_after_change_membership_level", 10, 2 );
//check at checkout if the user has used the trial level already
function my_pmpro_registration_checks($value) {
global $current_user;
//set this to the id of your trial level
$trial_level_id = array(
3,
4
);
if ( $current_user->ID && in_array( intval( $_REQUEST['level'] ), $trial_level_id ) ) {
//check if the current user has already used the trial level
$already = get_user_meta( $current_user->ID, "pmpro_trial_level_used", true );
//yup, don’t let them checkout
if ( $already ) {
global $pmpro_msg, $pmpro_msgt;
$pmpro_msg = "You have already used up your trial membership. Please select a full membership to checkout.";
$pmpro_msgt = "pmpro_error";
$value = false;
}
}
return $value;
}
add_filter( "pmpro_registration_checks", "my_pmpro_registration_checks" );
//swap the expiration text if the user has used the trial
function my_pmpro_level_expiration_text($text, $level) {
global $current_user;
//set this to the id of your trial level
$trial_level_id = array(
3,
4
);
if ( $current_user->ID && in_array( $level->id, $trial_level_id ) ) {
$text = "You have already used up your trial membership. Please select a full membership to checkout.";
}
return $text;
}
add_filter( "pmpro_level_expiration_text", "my_pmpro_level_expiration_text", 10, 2 );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment