So senden Sie E-Mails an Abonnenten mit wp_mail

Ich fange gerade an, Plugins zu machen, und ich versuche, ein einfaches zu machen, das eine Benachrichtigung an Subcribers schickt, wenn ich einen neuen Posten mache

so weit ich habe

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 .= "" .$post_title. "\n\n"; //send email to foreach($args as $email_address) { wp_mail($email_address, $subject, $message ); } } } 

Wie gehe ich vor, um ein Array mit der Liste der Abonnenten zu füllen, an die die Benachrichtigungen gesendet werden sollen

Solutions Collecting From Web of "So senden Sie E-Mails an Abonnenten mit wp_mail"

Sie waren beim Erstellen von WP_User_Query auf dem richtigen Weg, aber Sie verwenden das Ergebnis dieser Abfrage nicht. Sieh dir das an:

  //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 .= "" .$post_title. "\n\n"; //send email to all emails wp_mail($email_addresses, $subject, $message ); } 
  • Wir schleifen alle Benutzer und erstellen ein Array mit jeder E-Mail-Adresse
  • Wir benutzen dieses Array direkt als Parameter von wp_mail () (es unterstützt Arrays)

Beachten Sie, dass Sie wahrscheinlich einen Dienst eines Drittanbieters verwenden müssen, um viele E-Mails gleichzeitig zu versenden, oder Sie könnten Probleme mit Ihrem Hosting-Provider haben. Schau dir Mandrill an , sie haben ein WordPress-Plugin, das gut mit der wp_mail () -function funktioniert.

Sie sind fast da, aber Sie haben keine E-Mail-Adressen aus Ihrer Benutzerabfrage abgerufen

Dieser Code sollte tun, was Sie wollen, aber wenn Sie Ihre Frage richtig verstanden haben, möchten Sie eine individuelle E-Mail an jeden Abonnenten senden, was nicht effizient ist.

Es wäre besser, alle E-Mail-Adressen zu einem Array hinzuzufügen und die E-Mails auf einmal zu senden (die function wp_mail wird sie für Sie korrekt wp_mail ). Besser noch, fügen Sie die Adressen dem BCC-Feld hinzu, dann werden Ihre Abonnenten die Adressen aller anderen Abonnenten nicht sehen können.

 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.= "" .$post_title. "\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; }