web-dev-qa-db-fra.com

Besoin de clarification sur la façon d'appeler correctement wp_mail ()

Je souhaite appeler wp_mail() à partir d'un fichier non-template PHP, mais lorsque je le fais, il échoue et je ne comprends pas pourquoi. Par exemple, supposons que j’ai un fichier PHP composé uniquement de ceci:

<?php
    echo 'hi';
    $mail_sent = wp_mail('[email protected]', 'subject', 'message');
    echo $mail_sent;
?>

Si je charge ce fichier PHP directement dans mon navigateur, seul "hi" sera imprimé. Si je supprime echo 'hi'; au total, rien n’est imprimé, ce qui m’indique que wp_mail() ne peut pas être appelé dans ce contexte particulier. Cependant, si j'ajoute /* Template Name: SomeName */ au fichier et crée une nouvelle page en utilisant SomeName comme modèle, wp_mail() est exécuté correctement. Clairement, il me manque des informations essentielles sur la manière d'appeler correctement wp_mail().

La raison pour laquelle je veux faire cela est parce que le thème que j'utilise est venu avec un formulaire de contact qui envoie un email via une requête ajax à peu près comme ceci:

form.submit(function() {
    $j.ajax({
        type: 'GET',
        url: "http://www.example.com/wp-content/themes/themeX/send_mail.php",
        data: form.serialize(),
    });
});

Actuellement, send_mail.php appelle la fonction PHP mail() qui "fonctionne" mais qui est extrêmement feuilletée. Je veux qu'il appelle wp_mail() afin que je puisse profiter de ce plugin qui envoie un courrier en utilisant un serveur SMTP. Ma question est donc la suivante: comment puis-je faire fonctionner wp_mail() dans cette situation?

Merci!

1
Nick Spreitzer

Le script autonome ne chargera pas WordPress, il n'a donc pas de fonction wp_mail(). WordPress a ses propres gestionnaires Ajax intégrés que vous pouvez exploiter et avoir accès à toutes les fonctionnalités de WordPress au sein de ces appels Ajax.

2
helenhousandi

Vous pouvez également inclure les fonctions Wordpress dans votre script autonome comme suit:

require_once('wp-blog-header.php'); 

Je trouve que les fonctions WP ajax ne sont pas toujours la meilleure façon de faire. Par conséquent, l'écriture de votre propre gestionnaire AJAX est tout à fait valide.

3
James Bruce

wp_mail est une Fonction Pluggable vous devriez donc pouvoir appeler wp-includes/pluggable.php et ensuite avoir la capacité d'utiliser wp_mail ().

0
Brooke.