Senden Sie bestimmten Benutzern eine E-Mail, wenn Beiträge veröffentlicht werden

Ich habe den folgenden Code, der ausgeführt werden soll, wenn ein neuer Beitrag zum ersten Mal veröffentlicht wird, prüfen, ob ein benutzerdefiniertes Feld ‘specific_users’ Daten enthält (dies verwendet erweiterte benutzerdefinierte Felder), und wenn ja, senden Sie eine E-Mail an jeder der ausgewählten Benutzer.

/** * Send users a notification of new grower posts */ function notify_growers($post) { // Only notify for grower posts if ( $post->post_type != 'grower_posts' ) return; $post_id = $post->ID; // ...run code once if ( !get_post_meta( $post_id, 'emailsent', $single = true ) ) { $specific_users = get_field('specific_users',$post_id); if(isset($specific_users) && is_array($specific_users)) { foreach($specific_users as $specific_user) { $to = $specific_user['user_email']; $subject = 'Grower News: ' . get_the_title($post_id); $message = ''; $message .= '

' . get_the_excerpt($post_id) . '…

'; $message .= '

Continue Reading »

'; wp_mail($to, $subject, $message ); } unset($specific_user); //print("
User IDs = ".print_r($user_ids,true)."

"); } else { return; } // Make sure this doesn't run again update_post_meta( $post_id, 'emailsent', true ); } } add_action( 'draft_to_publish', 'notify_growers' ); add_action( 'new_to_publish', 'notify_growers' );

Es sendet keine E-Mails und ich bin mir nicht sicher, wie ich es debuggen soll.

Nebenfrage, sendet die E-Mail in der foreach-Schleife den besten Weg, es zu tun? Oder sollte ich das alles auf einmal mit BCCs machen?

Danke, Angus

Solutions Collecting From Web of "Senden Sie bestimmten Benutzern eine E-Mail, wenn Beiträge veröffentlicht werden"

Weißt du, ob deine wp_mail() function überhaupt funktioniert? Weißt du, ob deine function nicht in der Kette versagt?

Ich würde die function wie folgt neu schreiben, was es ein wenig einfacher zu lesen und auch etwas effizienter macht, da wir nur functionen ausführen, die wir unbedingt benötigen, damit eine bestimmte Bedingung erfüllt wird.

Außerdem habe ich den functionsaufruf get_field() entfernt, der nur ein Wrapper für get_post_meta() .

Das Speichern von $post_id = $post->ID wurde ebenfalls entfernt, da es zu diesem Zeitpunkt nicht notwendig ist, die ID aus irgendeinem Grund zu manipulieren oder zu cachen, so dass es nur ein wenig aufräumt.

Wenn Sie wissen, dass Ihr Aufruf an das benutzerdefinierte Feld ” specific_users ein serialisiertes Array zurückgibt, können Sie den true Parameter nach dem meta_key , um ein unserialisiertes Array zurückzuerhalten, andernfalls den true Wert weglassen.

isset wird true zurückgeben, auch wenn das Array leer ist und wenn es keine Ergebnisse im Array gibt, wird WordPress tatsächlich ein leeres Array zurückgeben, wenn der true Parameter nicht gesetzt ist. In diesem Fall gibt es einen leeren String zurück, also einen Aufruf an isset wurde entfernt und durch !empty($array) .

Ab diesem Punkt können Sie die function etwas einfacher debuggen …

 function notify_growers($post) { //if NOT post type 'grower_posts' then exit; if ( $post->post_type != 'grower_posts' ) return; //if email already sent then exit. if ( get_post_meta( $post->ID, 'emailsent', true ) ) return; //if email not sent then get an array of users to email $specific_users = get_post_meta($post->ID, 'specific_users'); //if $specific_users is an array and is not empty then send email. if(is_array($specific_users) && !empty($specific_users)) { foreach($specific_users as $specific_user) { //add mail logic here, $to, $subject, $message wp_mail($to, $subject, $message ); } unset($specific_user); //prevent emails from being sent by updating post meta field update_post_meta( $post->ID, 'emailsent', true ); } } add_action( 'draft_to_publish', 'notify_growers' ); add_action( 'new_to_publish', 'notify_growers' ); 

Sie können auch in Ihrer function debuggen. Schreiben Sie die Daten von vars in einem transient mit WordPress Standardfunktionen, wie set_transient() oder debuggen Sie in der Konsole Ihres Browsers. Sie können das Plugin Debug-Objekte für das Schreiben von PHP auf die Konsole von Webinspector in Chrome verwenden.

Vielleicht ist es eine gute Idee, einen exit(); hinzuzufügen exit(); vor den nahen Klammern od die function, um eine Ausgabe über PHP-Möglichkeiten, wie var_dump() zu erstellen und die function zu stoppen, um einfacher auf dem Bildschirm zu lesen.

In dieser wp_mail() in-Datei finden Sie weitere Hinweise zur Quelle. Verwenden Sie die function wp_mail() , damit der Job über Posts informiert. Vielleicht ist es eine kleine Hilfe zu sehen, wie es möglich ist.