Creare un'email di benvenuto personalizzata senza plugin

6 feb 2013, 01:30:44
Visualizzazioni: 17.5K
Voti: 4

Esiste un modo per personalizzare il contenuto e l'oggetto delle email di benvenuto e verifica inviate durante il processo di registrazione in WordPress? Vorrei utilizzare un hook o un filter senza ricorrere a plugin o alla funzione "pluggable".

Se qualcuno potesse indicarmi la direzione giusta, ne sarei molto grato. Grazie!

4
Commenti

Tutto ciò che incolli nel tuo functions.php è un potenziale plugin. Inoltre, perché non può essere con la pluggable function? Sei sicuro che la tua domanda non sia un duplicato? (controlla la colonna CORRELATI a destra)

brasofilo brasofilo
6 feb 2013 01:37:43

Finché posso eseguire l'azione dal mio file functions.php, sono d'accordo. Il problema con i plugin è che abbiamo molti siti nella nostra rete e tutti funzionano come un'applicazione collettiva anziché come singoli siti. Quindi hanno tutti bisogno dello stesso codice. Gestire l'attivazione di un plugin su ognuno di essi quando viene creato sembra uno sforzo enorme e continuo.

Jake Lisby Jake Lisby
6 feb 2013 17:27:56

È proprio per questo che esistono i plugin Must Use.

brasofilo brasofilo
6 feb 2013 17:34:57

Ho provato a seguire questa strada ma per qualche motivo non sovrascrive la casella di contenuto disponibile nel menu Impostazioni di Rete. Quindi anche se potrebbe attivarsi automaticamente, in realtà non sostituisce nulla. Sto usando un'installazione Multisite, quindi non sono sicuro di come questo influisca su queste funzioni pluggable.

Jake Lisby Jake Lisby
6 feb 2013 19:01:21
Tutte le risposte alla domanda 3
7

Purtroppo dovrai utilizzare la funzionalità delle funzioni pluggable - non ci sono filtri o hook all'interno di quelle funzioni (come puoi vedere dal codice qui sotto). E quel che è peggio, per te, è meglio usare una funzione pluggable in un plugin.

Questo perché definire una nuova funzione pluggable nel functions.php del tuo tema richiede di usare la definizione di una nuova funzione all'interno di un'altra funzione (per poterla chiamare non appena tutti i plugin sono completamente caricati), il che potrebbe non essere ideale (vedi i commenti sotto questo post), ma d'altro canto funziona - vedi il codice sotto il primo.

Per chi non è contrario ai plugin, eccone uno che riscrive una funzione pluggable - salvalo semplicemente in my_plugin.php (o qualsiasi altro nome) nella directory dei plugin e attivalo dal pannello di amministrazione:

<?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(){
        /**
         * Notifica l'amministratore del blog di un nuovo utente, normalmente 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);

        }
    }
}

Solo se sei curioso, ecco lo stesso effetto ottenuto dal functions.php con una nuova funzione definita all'interno di un'altra funzione:

//ridefinisci wp_new_user_notification non appena tutti i plugin sono caricati
add_action( 'plugins_loaded', 'new_user_notifiaction' );

function new_user_notifiaction(){
    /**
     * Notifica l'amministratore del blog di un nuovo utente, normalmente 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);

    }
}
6 feb 2013 01:48:11
Commenti

Puoi fornire un esempio di terze parti di una funzione pluggable definita come function dentro una funzione? È la prima volta che vedo questa cosa...

brasofilo brasofilo
6 feb 2013 02:11:16

Purtroppo non posso, ma funziona ;) C'è qualche motivo per cui questo approccio potrebbe causare problemi? Prestazioni? Integrità?

david.binda david.binda
6 feb 2013 02:37:22

Volevo assicurarmi che non ci fosse una fonte da copia/incolla per questo. È una cattiva pratica dichiarare una funzione dentro un'altra funzione. E per sovrascrivere una pluggable ti basta if( !function_exists('plug_func') ) { function plug_func() {} }.

brasofilo brasofilo
6 feb 2013 02:43:35

Sì, è vero che ho solo bisogno del codice che hai fornito, ma in quel caso il mio codice deve essere caricato prima di quello originale. E il functions.php del tema viene caricato dopo l'origine originale in pluggable.php - da qui l'hook plugins_loaded. E c'è qualche motivo per cui dichiarare una funzione dentro un'altra funzione sia una cattiva idea?

david.binda david.binda
6 feb 2013 02:51:33

OK, grazie. Ho modificato la risposta - ora include un modo standard fatto da plugin oltre al modo non preferibile di definire una funzione dentro un'altra funzione (in questo caso, penso sia meglio che creare una funzione direttamente in un callback, che potrebbe essere un'altra opzione)

david.binda david.binda
6 feb 2013 08:16:04

C'è un refuso notification vs notifiaction

Slbox Slbox
15 apr 2020 23:36:31
Mostra i restanti 2 commenti
0
-1

Quindi penso che la risposta sia no, non sei in grado di fare questo in modo sicuro.

6 feb 2013 20:40:36
0
-1

Questa sembra un'ottima idea, che potrebbe funzionare anche nel file functions.php:

// Aggiungi filtro per il corpo dell'email di registrazione
add_filter('wp_mail','handle_wp_mail');

function handle_wp_mail($atts) {
    /*"Your username and password" è l'oggetto dell'email che WordPress invia dalla "function wp_new_user_notification" nel file "wp-includes/pluggable.php"*/

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

Basta fare attenzione alla lingua per ottenere la stringa corretta per l'oggetto. (Fonte: http://wordpress.org/support/topic/how-to-change-registration-email-content?replies=3)

22 gen 2014 18:22:50