Supporto » Sviluppare con WordPress » problemi con wp_mail() e le proprietà dinamiche delle variabili

  • rikorebel

    (@rikorebel)


    Ciao a tutti,
    volevo intanto darvi un saluto visto che è la prima volta che scrivo in questo forum.
    Poi vorrei chiedervi supporto riguardo ad un problema che non riesco a risolvere da due giorni.

    Sto attualmente seguendo una guida online per lo sviluppo di temi custom e provando a replicare un passaggio che veniva riportato nella guida, ho notato che il codice utilizzato non funziona.

    Entrando nello specifico, ho creato un tema child del tema twentytwenty solo per fare qualche prova ed ho inserito nel function.php del tema child il codice che segue e che dovrebbe inviare un’email ad un autore a cui viene pubblicato un articolo sul sito in questione. Evito di riportare i settaggi dell’SMTP che ho inserito su wp_config(), questo perché da quel punto di vista sembra funzionare tutto.

    Il problema è che wp_mail() fa quello che gli chiedo solo se inserisco manualmente le stringhe per le proprietà $to, $subject e $message. Funziona anche se inserisco delle variabili che ho impostato inserendo valori manualmente, cioè senza recuperarli attraverso le funzioni di wordpress. Se provo a sostituirle con le variabili che ho creato appositamente e che recuperano i valori attraverso le funzioni di wordpress, wp_mail() non funziona.

    Quando invia le e-mail attraverso l’inserimento manuale dell’indirizzo ($to) e lascio gli altri campi inalterati ($subject, $message), ho notato che le parti dinamiche del messaggio dell’email che ho previsto tramite sprintf() e relativi placeholder, non vengono riportate.

    Ho testato i contenuti delle variabili attraverso un’altra funzione inserita nel function.php e richiamata alla fine del footer.php. Questa va semplicemente a stampare a video tramite echo i valori delle variabili in questione e l’output che restituisce sembra corretto.

    Cosa non sto tenendo in considerazione o che errore sto facendo?
    Di seguito il codice delle due funzioni che ho usato.
    Confido nella vostra esperienza.
    Vi ringrazio e per il momento vi mando un saluto.

    //Codice per l’invio di un’e-mail all’autore di un articolo che viene pubblicato
    add_action( ‘publish_post’, ‘mycallback_notify_new_post’ );
    function mycallback_notify_new_post( $post_ID ){
    global $post;
    $post_permalink = get_permalink( $post_ID );
    $author_id = $post->post_author;
    $author_email = get_the_author_meta( ‘user_email’, $author_id );
    $author_name = get_the_author_meta( ‘display_name’, $author_id );
    $to[] = sprintf( ‘%s <%s>’, $author_name, $author_email );
    $subject = __( ‘Hei! Your post has been published’, ‘twentytwenty’ );
    $message = sprintf( __( ‘Hi %s!’, ‘twentytwenty’ ), $author_name ) . “\r\n” .
    __( ‘Your post is now online’, ‘twentytwenty’ ) . “\r\n” .
    sprintf( __( ‘You can view it here: %s’, ‘twentytwenty’ ), $post_permalink ) . ‘.’;

    wp_mail( $to, $subject, $message);
    }

    //Codice per controllare il contenuto delle variabili
    add_action(‘cibsFunction’, ‘funzioneTest’);
    function funzioneTest(){
    echo ‘Ciao a tutti!’;
    global $post;
    $post_ID = $post->ID;
    $author_id = $post->post_author;
    $author_email = get_the_author_meta( ‘user_email’, $author_id );
    $author_name = get_the_author_meta( ‘display_name’, $author_id );
    $post_permalink = get_permalink( $post_ID );
    echo gettype($author_email);
    echo $author_email;
    echo $author_name;
    echo $author_id;
    echo $post_ID;
    $message = sprintf( __( ‘Hi %s! Your e-mail is %s’, ‘twentytwenty’ ), $author_name, $author_email ) . “\r\n” .
    __( ‘Your post is now online’, ‘twentytwenty’ ) . “\r\n” .
    sprintf( __( ‘You can view it here: %s’, ‘twentytwenty’ ), $post_permalink ) . ‘.’;

    echo $message;

    }
    `

    • Questo topic è stato modificato 1 settimana fa da rikorebel.
Stai visualizzando 1 risposte (di 1 totali)
  • Ciao @rikorebel,

    non ho una soluzione ma ti posso dare qualche suggerimento per cercare il problema.

    Le due funzioni che stai eseguendo avvengono in momenti (o meglio hooks) diversi, per cui è possibile che la prima non acceda alle informazioni e la seconda si (è un’ipotesi, non ho verificato).

    Ti conviene verificare il contenuto delle variabili quando le usi, quindi nella prima funzione.

    Invece di visualizzare i valori nella pagina, attiva il debug di WordPress aggiungendo queste righe al wp-config.php:

    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_LOG', true );
    define( 'WP_DEBUG_DISPLAY', false );

    Tutti i messaggi di debug saranno raccolti nel file /wp-content/debug.log.

    A questo punto, nella prima funzione, stampa i valori delle variabili usando questo codice:

    error_log( print_r( $variabile, true ) );

    sostituendo $variabile con il nome della relativa variabile che ti interessa.

    inizia ad esempio con il post corrente:

    global $post;
    
    error_log( print_r( $post, true ) );

    dopo aver salvato il file ripeti l’azione che provoca l’invio della mail, infine apri il file di log e controlla che la variabile contenga ciò che ti aspetti.

    Ripeti il procedimento fino a quando trovi qualcosa che non va.

    Fammi sapere 🙂

Stai visualizzando 1 risposte (di 1 totali)
  • Devi essere collegato per rispondere a questo topic.