Okay, I have answered question 1 above with this code:
<pre>
/*
* ccap corp_mbr,active added through registration or renewal of corporate memberships
* ccap inactive added (not working yet) to corporate membership when demoted due to EOT
*
* code below prevents removal of ccap for values = corp_mbr, bod_mbr, active, inactive
*/
foreach ($user->allcaps as $cap => $cap_enabled)
if ( preg_match ("/^access_s2member_ccap_/", $cap) )
if ( !preg_match ("/^access_s2member_ccap_corp_mbr/", $cap) &&
!preg_match ("/^access_s2member_ccap_bod_mbr/", $cap) &&
!preg_match ("/^access_s2member_ccap_active/", $cap) &&
!preg_match ("/^access_s2member_ccap_inactive/", $cap) )
$user->remove_cap ($ccap = $cap);
</pre>
Do you see anything wrong with this code?
Next, I have experimented with the question 1 inserting this code in the demoting section of the code in the original post above:
<pre>
/* added by WPE based on Dynamic EOT hack post in the S2member forum */
$existing_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
if($existing_role === 's2member_level12') { // Corporate Member
$demotion_role = 's2member_level6'; // expired Corporate Member
$user->add_cap("access_s2member_inactive");
$user->remove_cap("access_s2member_active");
}
else
$demotion_role = c_ws_plugin__s2member_option_forces::force_demotion_role("subscriber");
</pre>
This code (and there are actually a number of elseif’s to cover all of the s2member_levels) does work correctly to demote the role from level12 to level6; however, it does not add the ccap = inactive and remove ccap = active.
What am I doing wrong?
Thanks,
Bill