| @@ -70,11 +70,12 @@ | ||
| 70 | 70 | * @package s2Member\Option_Forces |
| 71 | 71 | * @since 3.5 |
| 72 | 72 | * |
| 73 | 73 | * @param string $demotion_role Expects the role to demote the user to. |
| 74 | + * @param \WP_User|null $user Optional user being demoted, for EOT-specific destination filters. | |
| 74 | 75 | * @return string Role users are demoted to, as configured by s2Member. |
| 75 | 76 | */ |
| 76 | - public static function force_demotion_role ($demotion_role = FALSE) | |
| 77 | + public static function force_demotion_role ($demotion_role = FALSE, $user = NULL) | |
| 77 | 78 | { |
| 78 | 79 | do_action("ws_plugin__s2member_before_force_demotion_role", get_defined_vars ()); |
| 79 | 80 | |
| 80 | 81 | //260916.1840 Use the administrator's configured EOT destination first; the long-standing filter remains the final developer override. |
| @@ -81,8 +82,11 @@ | ||
| 81 | 82 | $demotion_role = !empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_demotion_to_role"]) ? $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_demotion_to_role"] : "subscriber"; |
| 82 | 83 | //260916.2306 Validate registered-role existence here, after s2Member is fully loaded; doing this in bootstrap option validation can initialize WordPress roles too early. |
| 83 | 84 | if(in_array($demotion_role, array('administrator', 'editor', 'author', 'contributor', 's2member_pending_deletion'), TRUE) || !get_role($demotion_role)) |
| 84 | 85 | $demotion_role = "subscriber"; |
| 86 | + | |
| 87 | + //261007.2005 Resolve user-specific EOT destinations before the established final developer override. | |
| 88 | + $demotion_role = apply_filters("ws_plugin__s2member_eot_demotion_role", $demotion_role, get_defined_vars ()); | |
| 85 | 89 | |
| 86 | 90 | return apply_filters("ws_plugin__s2member_force_demotion_role", $demotion_role, get_defined_vars ()); |
| 87 | 91 | } |
| 88 | 92 | /** |