Je commence tout juste à créer des plugins et j'essaie d'en créer un simple qui envoie une notification aux abonnés chaque fois que je publie un nouveau message.
Mon code jusqu'ici:
add_action( 'publish_post', 'vb_esa_update_email' );
function vb_esa_update_email( $post_id ) {
//verify post is not a revision
if ( !wp_is_post_revision( $post_id ) ) {
//gets subscirbers to send email to
// WP_User_Query arguments
$args = array (
'role' => 'Subscriber',
);
// The User Query
$user_query = new WP_User_Query( $args );
$post_title = get_the_title( $post_id );
$post_url = get_permalink( $post_id );
$subject = 'A post has been updated';
$message = "A post has been updated on your website:\n\n";
$message .= "<a href='". $post_url. "'>" .$post_title. "</a>\n\n";
//send email to
foreach($args as $email_address)
{
wp_mail($email_address, $subject, $message );
}
}
}
Comment puis-je remplir un tableau avec la liste des abonnés auxquels envoyer les notifications?
Vous étiez sur la bonne voie lorsque vous avez construit votre WP_User_Query, mais vous n'utilisez pas le résultat de cette requête. Regarde ça:
//verify post is not a revision
if ( !wp_is_post_revision( $post_id ) ) {
//gets subscirbers to send email to
// WP_User_Query arguments
$args = array (
'role' => 'Subscriber',
);
// The User Query
$user_query = new WP_User_Query( $args );
// get email addresses from user objects
$email_addresses = array();
foreach ( $user_query->results as $user ) {
$email_addresses[] = $user->user_email;
}
// build message
$post_title = get_the_title( $post_id );
$post_url = get_permalink( $post_id );
$subject = 'A post has been updated';
$message = "A post has been updated on your website:\n\n";
$message .= "<a href='". $post_url. "'>" .$post_title. "</a>\n\n";
//send email to all emails
wp_mail($email_addresses, $subject, $message );
}
wp_mail()
(il supporte les tableaux)Notez que vous auriez probablement besoin d'un service tiers pour envoyer plusieurs mails à la fois, ou vous pourriez avoir un problème avec votre fournisseur d'hébergement. Regardez Mandrill . Ils ont un plugin WordPress qui fonctionne bien avec la fonction wp_mail()
.
Vous y êtes presque, mais vous ne récupériez aucune des adresses électroniques de votre requête d'utilisateur
Ce code doit faire ce que vous voulez, mais si ma compréhension de votre question est correcte, vous souhaitez envoyer un courrier électronique individuel à chaque abonné, ce qui n’est pas efficace.
Il serait préférable d’ajouter toutes les adresses e-mail à un tableau et de les envoyer en une fois (la fonction wp_mail
les séparera correctement pour vous). Mieux encore, ajoutez les adresses au champ Cci, vos abonnés ne pourront pas voir les adresses de tous les autres abonnés.
add_action('publish_post', 'vb_esa_update_email');
function vb_esa_update_email($post_id){
/** Ensure that the post is not a revision */
if(wp_is_post_revision($post_id)) :
return;
/** Query all users who have the role 'Subscriber' */
$args = array (
'role' => 'Subscriber',
);
$user_query = new WP_User_Query($args);
/** Check to see if there are any matching users */
if(!empty($user_query->results)) :
/** Set up the email subject and message */
$post_title = get_the_title( $post_id );
$post_url = get_permalink( $post_id );
$subject = 'A post has been updated';
$message = "A post has been updated on your website:\n\n";
$message.= "<a href='". $post_url. "'>" .$post_title. "</a>\n\n";
/** Send an individual message to each user */
foreach($user_query->results as $user) :
wp_mail($user->data->user_email, $subject, $message);
endforeach;
endif;
}