我有一个前端提交表单,用户可以在其中向自定义帖子类型添加事件。我想在此活动发生前1周向每个用户发送一封电子邮件。
电子邮件通过wp_cron
. 该函数是用钩子调用的。它工作正常,但我想向电子邮件正文添加自定义值。
使用我的代码,无法为我的电子邮件正文模板添加动态值。
使用下面的函数,我循环遍历events post类型并获得所需的数据
function leweb_get_events_detail() {
// Query
global $wp_query;
// Arguments
$args = array(
\'post_type\' => \'events\',
);
// Start the Query
$query = new WP_Query( $args );
// The Loop
if( $query->have_posts() ) {
$results = array();
while( $query->have_posts() ) {
$query->the_post();
$event_date_timestamp = get_post_meta( get_the_ID(), \'event_date_timestamp\', true );
$future_timestamp = strtotime("+1 week");
// Damit wird geprüft ob schon einmal diese Email gesendet wurde
$notification = get_post_meta( get_the_ID(), \'event_creator_notification\' );
if( !in_array( \'1week\', $notification ) && $event_date_timestamp < $future_timestamp ) {
$event_id = get_the_ID();
$event_email = get_post_meta( get_the_ID(), \'event_email\', true );
$results[] = array(
\'event_id\' => $event_id,
\'event_date_timestamp\' => $event_date_timestamp,
\'event_email\' => $event_email,
);
}
}
return $results;
}
wp_reset_query();
}
下面的函数允许我从post\\u元数组中提取数据:
function leweb_get_values_from_post_meta( $meta = \'\') {
$results = leweb_get_events_detail();
$values = array();
foreach( $results as $key => $value ){
$values[] = $value[ $meta ];
}
return $values;
}
下面的函数调用自
wp_cron
. 该电子邮件将发送给符合上述条件的所有收件人,并在帖子元中添加一个值,以防止多次发送此电子邮件。
function leweb_send_mail_to_author() {
// Alle Emails aus dem Array auslesen und für das BCC Feld im Email Header vorbereiten
$emails = leweb_get_values_from_post_meta( \'event_email\');
if ( !empty( $emails ) ) {
$emails = \'BCC: \' . implode( \',\', $emails );
// Email senden
$to = \'\';
$subject = \'Dein Event findet bald statt!\';
$body = file_get_contents( get_stylesheet_directory() . \'/templates/email/event-creator-notification.php\');
$headers = array( \'Content-Type: text/html; charset=UTF-8\',\'From: Example <[email protected]>\', $emails );
wp_mail( $to, $subject, $body, $headers );
// Wert in post_meta eintragen um die Mehrfachsendung zu verhindern
$post_id = leweb_get_values_from_post_meta( \'event_id\');
foreach( $post_id as $id ) {
add_post_meta( $id, \'event_creator_notification\', \'1week\' );
}
}
}
After I coded this I figured out. it\'s not possible to send dynamic content in the body of my email. 实现这一目标的唯一方法是调用
wp_mail()
在foreach。但我想这会很重吧?将来,此作业每次运行最多可能发送100封电子邮件。。。
所以我想知道是否有其他方法可以做到干净?