diff --git a/changelog/fix-wpmail-temporary-users b/changelog/fix-wpmail-temporary-users new file mode 100644 index 0000000000..6cf02ff4f0 --- /dev/null +++ b/changelog/fix-wpmail-temporary-users @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Block triggering wp_mail for temporary users even on non-frontend context. diff --git a/includes/class-sensei-guest-user.php b/includes/class-sensei-guest-user.php index d95fae8a2c..f5b39e550b 100644 --- a/includes/class-sensei-guest-user.php +++ b/includes/class-sensei-guest-user.php @@ -147,7 +147,6 @@ public function init() { add_action( 'sensei_can_access_course_content', [ $this, 'open_course_enable_course_access' ], 10, 2 ); add_action( 'sensei_can_user_manually_enrol', [ $this, 'open_course_user_can_manualy_enroll' ], 10, 2 ); add_filter( 'sensei_send_emails', [ $this, 'skip_sensei_email' ] ); - add_filter( 'pre_wp_mail', [ $this, 'skip_wp_mail' ], 10, 2 ); $this->create_guest_student_role_if_not_exists(); @@ -307,7 +306,7 @@ private function is_course_open_access( $course_id ) { * @since 4.11.0 * @access private */ - private function is_current_user_guest() { + private static function is_current_user_guest() { $user = wp_get_current_user(); return self::is_guest_user( $user ); } @@ -475,7 +474,7 @@ private function is_action( $field, $nonce ) { * @return boolean Whether to send the email. */ public function skip_sensei_email( $send_email ) { - return $this->is_current_user_guest() ? false : $send_email; + return self::is_current_user_guest() ? false : $send_email; } /** @@ -488,8 +487,8 @@ public function skip_sensei_email( $send_email ) { * @param array $atts Email attributes. * @return bool|null Null if we should send the email, a boolean if not. */ - public function skip_wp_mail( $return, $atts ) { - if ( $this->is_current_user_guest() ) { + public static function skip_wp_mail( $return, $atts ) { + if ( self::is_current_user_guest() ) { // If this e-mail is being dispatched while the current user is a guest, just... don't send it. return false; } diff --git a/includes/class-sensei-preview-user.php b/includes/class-sensei-preview-user.php index 26ef11620f..aa5d7ba89f 100644 --- a/includes/class-sensei-preview-user.php +++ b/includes/class-sensei-preview-user.php @@ -92,7 +92,6 @@ public function init() { add_action( 'show_admin_bar', [ $this, 'show_admin_bar_to_preview_user' ], 90 ); add_action( 'admin_bar_menu', [ $this, 'add_user_switch_to_admin_bar' ], 90 ); add_filter( 'sensei_is_enrolled', [ $this, 'preview_user_always_enrolled' ], 90, 3 ); - add_filter( 'pre_wp_mail', [ $this, 'skip_wp_mail' ], 10, 2 ); $this->create_role(); } @@ -103,7 +102,7 @@ public function init() { * @access private */ public function add_preview_user_filters() { - if ( $this->is_preview_user_active() ) { + if ( self::is_preview_user_active() ) { add_filter( 'map_meta_cap', [ $this, 'allow_post_preview' ], 10, 4 ); add_filter( 'pre_get_posts', [ $this, 'count_unpublished_lessons' ], 10 ); add_filter( 'sensei_notice', [ $this, 'hide_notices' ], 10, 1 ); @@ -195,7 +194,7 @@ public function add_user_switch_to_admin_bar( $wp_admin_bar ) { return; } - if ( $this->can_switch_to_preview_user( $course_id ) && ! $this->is_preview_user_active() ) { + if ( $this->can_switch_to_preview_user( $course_id ) && ! self::is_preview_user_active() ) { $wp_admin_bar->add_node( [ 'id' => self::SWITCH_ON_ACTION, @@ -209,7 +208,7 @@ public function add_user_switch_to_admin_bar( $wp_admin_bar ) { ); } - if ( $this->is_preview_user_active() ) { + if ( self::is_preview_user_active() ) { $wp_admin_bar->add_node( [ 'id' => self::SWITCH_OFF_ACTION, @@ -236,7 +235,7 @@ public function add_user_switch_to_admin_bar( $wp_admin_bar ) { * @return bool */ public function show_admin_bar_to_preview_user( $show ) { - if ( $this->is_preview_user_active() ) { + if ( self::is_preview_user_active() ) { return true; } @@ -264,8 +263,8 @@ private function can_switch_to_preview_user( $course_id ) { * @param array $atts Email attributes. * @return bool|null Null if we should send the email, a boolean if not. */ - public function skip_wp_mail( $return, $atts ) { - if ( $this->is_preview_user_active() ) { + public static function skip_wp_mail( $return, $atts ) { + if ( self::is_preview_user_active() ) { // If this e-mail is being dispatched while the current user is a previwe user, just... don't send it. return false; } @@ -481,7 +480,7 @@ private function set_preview_user( $preview_user_id ) { * * @return bool */ - private function is_preview_user_active() { + private static function is_preview_user_active() { $user = wp_get_current_user(); return self::is_preview_user( $user ); } diff --git a/includes/class-sensei-temporary-user.php b/includes/class-sensei-temporary-user.php index 500689d63c..af83084082 100644 --- a/includes/class-sensei-temporary-user.php +++ b/includes/class-sensei-temporary-user.php @@ -35,6 +35,8 @@ public static function init() { add_filter( 'sensei_learners_query', [ static::class, 'filter_learners_query' ] ); add_filter( 'sensei_count_statuses_args', [ static::class, 'filter_count_statuses' ] ); add_filter( 'sensei_check_for_activity', [ static::class, 'filter_sensei_activity' ], 10, 2 ); + add_filter( 'pre_wp_mail', [ Sensei_Guest_User::class, 'skip_wp_mail' ], 10, 2 ); + add_filter( 'pre_wp_mail', [ Sensei_Preview_User::class, 'skip_wp_mail' ], 10, 2 ); } /**