web-dev-qa-db-fra.com

Créez un email de bienvenue personnalisé sans plugin

Existe-t-il un moyen de personnaliser le contenu et l'objet du courrier électronique pour les courriers électroniques de bienvenue et de vérification envoyés pendant le processus d'inscription à Wordpress? Je voudrais accrocher ou filtrer sans utiliser un plugin ou la fonctionnalité "pluggable".

Si quelqu'un pouvait me diriger dans la bonne direction, je vous en serais très reconnaissant. Merci!

4
Jake Lisby

Je crains que vous n'ayez à utiliser la fonctionnalité des fonctions enfichables - il n'y a pas de filtre ou de raccordement à l'intérieur de ces fonctions (comme vous pouvez le voir dans le code ci-dessous). Et ce qui est pire, pour vous, il vaut mieux utiliser la fonction pluggable dans un plugin .

C’est parce que la définition d’une nouvelle fonction plug-in dans le fichier functions.php vous demande d’utiliser une définition d’une nouvelle fonction dans une fonction (pour l’appeler dès que tous les plugins sont complètement chargés), ce qui peut être incorrect (voir les commentaires ci-dessous cet article), mais d’autre part, cela fonctionne - voir le code ci-dessous le premier.

Pour ceux qui ne sont pas contre les plugins, en voici une qui réécrit une fonction pluggable - il suffit de la sauvegarder dans my_plugin.php (ou toute autre chose) dans votre répertoire de plugins et de l'activer à partir de votre administrateur:

<?php
/*
Plugin Name: Name Of The Plugin
Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
Description: A brief description of the Plugin.
Version: The Plugin's Version Number, e.g.: 1.0
Author: Name Of The Plugin Author
Author URI: http://URI_Of_The_Plugin_Author
License: A "Slug" license name e.g. GPL2
*/
if( !function_exists('new_user_notification') ){
function new_user_notifiaction(){
        /**
         * Notify the blog admin of a new user, normally via email.
         *
         * @since 2.0
         *
         * @param int $user_id User ID
         * @param string $plaintext_pass Optional. The user's plaintext password
         */
        function wp_new_user_notification($user_id, $plaintext_pass = '') {
            $user = get_userdata( $user_id );

            $user_login = stripslashes($user->user_login);
            $user_email = stripslashes($user->user_email);

            // The blogname option is escaped with esc_html on the way into the database in sanitize_option
            // we want to reverse this for the plain text arena of emails.
            $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);

            $message  = sprintf(__('New user registration on your site %s:'), $blogname) . "\r\n\r\n";
            $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
            $message .= sprintf(__('E-mail: %s'), $user_email) . "\r\n";

            @wp_mail(get_option('admin_email'), sprintf(__('[%s] New User Registration'), $blogname), $message);

            if ( empty($plaintext_pass) )
                return;

            $message  = sprintf(__('Username: %s'), $user_login) . "\r\n";
            $message .= sprintf(__('Password: %s'), $plaintext_pass) . "\r\n";
            $message .= wp_login_url() . "\r\n";

            wp_mail($user_email, sprintf(__('[%s] Your username and password'), $blogname), $message);

        }
    }
}

Si vous êtes curieux, voici le même effet géré par functions.php avec une nouvelle fonction définie dans une autre fonction:

//redefine wp_new_user_notification as soon as all plugins are loaded
add_action( 'plugins_loaded', 'new_user_notifiaction' );

function new_user_notifiaction(){
    /**
     * Notify the blog admin of a new user, normally via email.
     *
     * @since 2.0
     *
     * @param int $user_id User ID
     * @param string $plaintext_pass Optional. The user's plaintext password
     */
    function wp_new_user_notification($user_id, $plaintext_pass = '') {
        $user = get_userdata( $user_id );

        $user_login = stripslashes($user->user_login);
        $user_email = stripslashes($user->user_email);

        // The blogname option is escaped with esc_html on the way into the database in sanitize_option
        // we want to reverse this for the plain text arena of emails.
        $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);

        $message  = sprintf(__('New user registration on your site %s:'), $blogname) . "\r\n\r\n";
        $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
        $message .= sprintf(__('E-mail: %s'), $user_email) . "\r\n";

        @wp_mail(get_option('admin_email'), sprintf(__('[%s] New User Registration'), $blogname), $message);

        if ( empty($plaintext_pass) )
            return;

        $message  = sprintf(__('Username: %s'), $user_login) . "\r\n";
        $message .= sprintf(__('Password: %s'), $plaintext_pass) . "\r\n";
        $message .= wp_login_url() . "\r\n";

        wp_mail($user_email, sprintf(__('[%s] Your username and password'), $blogname), $message);

    }
}
0
david.binda

Cela semble être une bonne idée, qui fonctionnerait aussi dans functions.php:

// Add filter for registration email body
add_filter('wp_mail','handle_wp_mail');

function handle_wp_mail($atts) {
    /*"Your username and password" is the subject of the Email WordPress send from "function wp_new_user_notification" in file "wp-includes/pluggable.php"*/

    if (isset ($atts ['subject']) && substr_count($atts ['subject'],'Your username and password')>0 ) {
    if (isset($atts['message'])) {
       $atts['message'] = 'new body';
    }
    }
    return ($atts);
}

Faites juste attention à la langue pour obtenir la bonne chaîne de sujet. (Source: http://wordpress.org/support/topic/how-to-change-registration-email-content?replies=3 )

0
optimiertes