Skip to content Skip to sidebar

This is the technical support forum for WPML - the multilingual WordPress plugin.

Everyone can read, but only WPML clients can post here. WPML team is replying on the forum 6 days per week, 22 hours per day.

Sun Mon Tue Wed Thu Fri Sat
- 9:00 – 17:00 9:00 – 17:00 9:00 – 17:00 9:00 – 17:00 9:00 – 17:00 -
- - - - - - -

Supporter timezone: Europe/Warsaw (GMT+01:00)

This topic contains 1 replies, has 1 voice.

Last updated by Łukasz Rydygel 6 days, 4 hours ago.

Assisted by: Łukasz Rydygel.

Author Posts
January 19, 2026 at 7:30 am #17741104

michaelB-258

I need the precise WordPress hooks that WPML uses to send email notifications, both to admins, transaltion managers and translators registered on the site. Any kind (all) email notifciations sent from WPML with wp_mail() must be disabled, hence the need for the precise hooks used.
Many thanks in advance!

January 19, 2026 at 3:14 pm #17743132

Łukasz Rydygel
Supporter

Languages: English (English ) German (Deutsch )

Timezone: Europe/Warsaw (GMT+01:00)

Hello,
To disable email notifications sent by WPML to admins, translation managers, and translators, there are two approaches:

Disable Translation Manager Notifications (UI)
The most precise way to manage these is through the WPML interface. You can disable most notifications here:
Navigate to WPML > Settings.
Scroll down to the Translation Notifications section.
Here you can uncheck the options for sending notifications to the translation manager and translators.

Disable all Mails send by WMPL
If you want to ensure that absolutely no email originating from WPML is sent, the most reliable method is to intercept the pre_wp_mail filter and check the PHP call stack. If a WPML class is initiating the mail, the process is aborted.
You can add the following code to your functions.php or a functional plugin:

add_filter( 'pre_wp_mail', 'wpml_custom_stop_all_notifications' );

function wpml_custom_stop_all_notifications( $return ) {
    $call_stack = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );
    foreach ( $call_stack as $call ) {
        if ( isset( $call['class'] ) ) {
            if ( 
                strpos( $call['class'], 'WPML_' ) === 0 || 
                strpos( $call['class'], 'ICL_' ) === 0 || 
                strpos( $call['class'], 'TranslationProxy' ) === 0 
            ) {
                return false; 
            }
        }
    }

    return $return;
}

Please note that this is a temporary fix while our team works on a better, generic solution. The current version uses a debug backtrace to function, but we are working on a more elegant permanent fix that will be available soon.

Regards,
Lukas