Apr, 2015
How do I specify the Demotion Role upon EOT?
When a user's account reaches End-of-Term (EOT) and your Membership EOT Behavior settings (see WordPress Dashboard → s2Member → [Payment Gateway] Options → Automatic EOT Behavior → Membership EOT Behavior) are set to Demote the user upon reaching EOT, the user will, by default, be demoted to Level 0 / Subscriber. However, it is possible to override this default behavior.
If your particular business rules require that users be demoted to a different level upon EOT, e.g., Level 1 instead of Level 0 / Subscriber, you can create an MU-Plugin with the following code to tell s2Member to demote to Level 1:
Create this file and directory: wp-content/mu-plugins/s2-eot-role.php
:
<?php
add_filter('ws_plugin__s2member_force_demotion_role', function(){ return 's2member_level1'; });
Custom Demotion Role Based On Previous Role?
This requires a slightly different technique. Instead of forcing a specific demotion role for all demotions, we need to hook into s2Member and see what the Role was before a demotion occurred, and then alter this in custom ways. Here is a quick example.
Note: This example does not depend on the one above that was mentioned previously; i.e., if you choose this route, use this route only. Do not attempt to mix both code samples together at the same time please.
Create this file and directory: wp-content/mu-plugins/s2-custom-eot-roles.php
:
<?php
add_action('ws_plugin__s2member_during_auto_eot_system_during_demote', 's2_custom_eot_demotion_role');
add_action('ws_plugin__s2member_during_paypal_notify_during_subscr_eot_demote', 's2_custom_eot_demotion_role');
function s2_custom_eot_demotion_role(array $vars) {
$user = $vars['user']; // WP_User object instance.
$role_before_demotion = $vars['existing_role']; // Role ID before demotion by s2Member.
if($role_before_demotion === 's2member_level5') {
$user->set_role('s2member_level3'); // If they were at level 5, force a custom demotion to level 3.
} else if($role_before_demotion === 's2member_level4') {
$user->set_role('s2member_level2'); // If they were at level 4, force a custom demotion to level 2.
}
}