Creare email personalizat de bun venit fără plugin

6 feb. 2013, 01:30:44
Vizualizări: 17.5K
Voturi: 4

Există vreo metodă de a personaliza conținutul și subiectul email-urilor de bun venit și de verificare trimise în procesul de înregistrare WordPress? Aș dori să folosesc un hook sau filtru fără a utiliza un plugin sau funcționalitatea "pluggable".

Dacă cineva mă poate îndruma în direcția corectă, aș fi foarte recunoscător. Mulțumesc!

4
Comentarii

Orice lipiți în fișierul functions.php este un potențial plugin. De asemenea, de ce nu poate fi cu funcția pluggable? Sunteți sigur că întrebarea dvs. nu este un duplicat? (verificați coloana RELATED din dreapta)

brasofilo brasofilo
6 feb. 2013 01:37:43

Atâta timp cât pot efectua acțiunea din fișierul meu functions.php, sunt de acord. Problema cu plugin-urile este că avem multe site-uri în rețeaua noastră și toate funcționează ca o aplicație colectivă, nu ca site-uri individuale. Deci toate au nevoie de același cod. Gestionarea activării unui plugin pe fiecare atunci când este creat pare a fi o muncă excesivă pe termen lung.

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

Tocmai de aceea există plugin-urile Must Use.

brasofilo brasofilo
6 feb. 2013 17:34:57

Așa că am încercat să merg pe această cale, dar din nu știu ce motiv nu suprascrie caseta de conținut disponibilă în meniul Setări de Rețea. Deci, deși s-ar putea să se activeze automat, de fapt nu înlocuiește nimic. Folosesc o Instalare Multisite, așa că nu sunt sigur cum afectează aceste funcții plugabile.

Jake Lisby Jake Lisby
6 feb. 2013 19:01:21
Toate răspunsurile la întrebare 3
7

Din păcate, va trebui să utilizați funcțiile pluggable - nu există niciun filtru sau hook în interiorul acelor funcții (după cum puteți vedea din codul de mai jos). Și ce e mai rău, pentru dumneavoastră, este mai bine să folosiți funcția pluggable într-un plugin.

Aceasta deoarece definirea unei noi funcții pluggable în functions.php al temei vă cere să folosiți definirea unei noi funcții în interiorul altei funcții (pentru a o apela imediat ce toate pluginurile sunt încărcate), ceea ce poate fi nepotrivit (vezi comentariile de mai jos), dar pe de altă parte, funcționează - vezi codul de mai jos.

Pentru cei care nu sunt împotriva pluginurilor, iată unul care rescrie o funcție pluggable - salvați-l pur și simplu în my_plugin.php (sau altceva) în directorul de pluginuri și activați-l din panoul de administrare:

<?php
/*
Plugin Name: Numele Pluginului
Plugin URI: http://URL_Pagina_Descriere_Plugin_Si_Actualizari
Description: O scurtă descriere a Pluginului.
Version: Numărul Versiunii Pluginului, ex: 1.0
Author: Numele Autorului Pluginului
Author URI: http://URL_Autor_Plugin
License: Un "Slug" pentru licență, ex. GPL2
*/
if( !function_exists('new_user_notification') ){
function new_user_notifiaction(){
        /**
         * Notifică administratorul blogului despre un nou utilizator, de obicei prin email.
         *
         * @since 2.0
         *
         * @param int $user_id ID-ul utilizatorului
         * @param string $plaintext_pass Opțional. Parola în text clar a utilizatorului
         */
        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);

            // Opțiunea blogname este escapată cu esc_html la salvarea în baza de date în sanitize_option
            // dorim să inversăm acest lucru pentru emailurile în format text simplu.
            $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);

            $message  = sprintf(__('Înregistrare utilizator nou pe site-ul dumneavoastră %s:'), $blogname) . "\r\n\r\n";
            $message .= sprintf(__('Nume de utilizator: %s'), $user_login) . "\r\n\r\n";
            $message .= sprintf(__('E-mail: %s'), $user_email) . "\r\n";

            @wp_mail(get_option('admin_email'), sprintf(__('[%s] Înregistrare Utilizator Nou'), $blogname), $message);

            if ( empty($plaintext_pass) )
                return;

            $message  = sprintf(__('Nume de utilizator: %s'), $user_login) . "\r\n";
            $message .= sprintf(__('Parolă: %s'), $plaintext_pass) . "\r\n";
            $message .= wp_login_url() . "\r\n";

            wp_mail($user_email, sprintf(__('[%s] Numele de utilizator și parola dumneavoastră'), $blogname), $message);

        }
    }
}

Doar dacă sunteți curios, iată același efect realizat din functions.php cu o nouă funcție definită în interiorul altei funcții:

//redefinește wp_new_user_notification imediat ce toate pluginurile sunt încărcate
add_action( 'plugins_loaded', 'new_user_notifiaction' );

function new_user_notifiaction(){
    /**
     * Notifică administratorul blogului despre un nou utilizator, de obicei prin email.
     *
     * @since 2.0
     *
     * @param int $user_id ID-ul utilizatorului
     * @param string $plaintext_pass Opțional. Parola în text clar a utilizatorului
     */
    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);

        // Opțiunea blogname este escapată cu esc_html la salvarea în baza de date în sanitize_option
        // dorim să inversăm acest lucru pentru emailurile în format text simplu.
        $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);

        $message  = sprintf(__('Înregistrare utilizator nou pe site-ul dumneavoastră %s:'), $blogname) . "\r\n\r\n";
        $message .= sprintf(__('Nume de utilizator: %s'), $user_login) . "\r\n\r\n";
        $message .= sprintf(__('E-mail: %s'), $user_email) . "\r\n";

        @wp_mail(get_option('admin_email'), sprintf(__('[%s] Înregistrare Utilizator Nou'), $blogname), $message);

        if ( empty($plaintext_pass) )
            return;

        $message  = sprintf(__('Nume de utilizator: %s'), $user_login) . "\r\n";
        $message .= sprintf(__('Parolă: %s'), $plaintext_pass) . "\r\n";
        $message .= wp_login_url() . "\r\n";

        wp_mail($user_email, sprintf(__('[%s] Numele de utilizator și parola dumneavoastră'), $blogname), $message);

    }
}
6 feb. 2013 01:48:11
Comentarii

Poți să oferi un exemplu de la o terță parte de o funcție pluggable definită ca o funcție în interiorul unei funcții? Este prima dată când văd așa ceva...

brasofilo brasofilo
6 feb. 2013 02:11:16

Din păcate nu pot, dar funcționează ;) Există vreun motiv pentru care această abordare ar putea cauza probleme? Performanță? Integritate?

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

Voiam să mă asigur că nu există o sursă copy/paste pentru asta. Este o practică proastă să declari o funcție în interiorul altei funcții. Și pentru a suprascrie o funcție pluggable ai nevoie doar de if( !function_exists('plug_func') ) { function plug_func() {} }.

brasofilo brasofilo
6 feb. 2013 02:43:35

Da, este adevărat că am nevoie doar de codul pe care l-ai furnizat, dar în acest caz codul meu trebuie să fie încărcat înaintea celui original. Iar functions.php al temei este încărcat după sursa originală din pluggable.php - de aceea am folosit hook-ul plugins_loaded. Și există vreun motiv pentru care declararea unei funcții în interiorul altei funcții ar fi o idee proastă?

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

OK, mulțumesc. Am modificat răspunsul - acum include o metodă standard realizată dintr-un plugin, pe lângă varianta mai puțin preferată de definire a unei funcții în interiorul altei funcții (în acest caz, cred că e mai bine decât crearea unei funcții direct într-un callback, care ar putea fi o altă opțiune)

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

Ai o greșeală de scriere notification vs notifiaction

Slbox Slbox
15 apr. 2020 23:36:31
Arată celelalte 2 comentarii
0
-1

Deci cred că răspunsul este nu, nu poți face acest lucru într-un mod sigur.

6 feb. 2013 20:40:36
0
-1

Aceasta pare o idee bună, care ar funcționa și în functions.php:

// Adaugă un filtru pentru corpul email-ului de înregistrare
add_filter('wp_mail','handle_wp_mail');

function handle_wp_mail($atts) {
    /*"Your username and password" este subiectul Email-ului trimis de WordPress din "funcția wp_new_user_notification" în fișierul "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);
}

Doar fii atent la limbă pentru a obține șirul de subiect corect. (Sursa: http://wordpress.org/support/topic/how-to-change-registration-email-content?replies=3)

22 ian. 2014 18:22:50