WordPress:wp_mail函数只能在foreach循环中运行一次
我正在运行一个cron函数来删除旧事件(基于自定义字段)。 该函数可以查找并删除过去所有的事件。 到目前为止这么好...WordPress:wp_mail函数只能在foreach循环中运行一次
现在我想发一个电子邮件给活动的作者,该活动已被删除。我正在用foreach中的一个额外的wp_mail
函数来执行此操作。
现在的问题是,只有最后一个旧事件被删除。也许这与foreach中的邮件变量($post
,$author
,...)有关系吗?
我读到一些关于这个问题在这里,但我不明白:wp_mail() in a loop, only sending to last address
这里是我的代码:
function get_delete_old_events() {
$past_query = date('Y-m-d', strtotime('-1 day'));
// Set our query arguments
$args = [
'fields' => 'ids', // Only get post ID's to improve performance
'post_type' => 'event', // Post type
'posts_per_page' => -1,
'meta_query' => [
[
'key' => 'gid_22', // Replace this with the event end date meta key.
'value' => $past_query,
'compare' => '<='
]
]
];
$q = get_posts($args);
// Check if we have posts to delete, if not, return false
if (!$q)
return false;
// OK, we have posts to delete, lets delete them
foreach ($q as $id)
/* start e-mail */
$headers[] = 'From: SITENAME <[email protected]>';
$post = get_post($id);
$author = get_userdata($post->post_author);
$subject = "SUBJECT: ".$post->post_title."";
$message = "THE MESSAGE BODY";
wp_mail($author->user_email, $subject, $message, $headers);
/* end e-mail */
wp_trash_post($id);
}
// expired_post_delete hook fires when the Cron is executed
add_action('old_event_delete', 'get_delete_old_events');
// Add function to register event to wp
add_action('wp', 'register_daily_events_delete_event');
function register_daily_events_delete_event() {
// Make sure this event hasn't been scheduled
if(!wp_next_scheduled('old_event_delete')) {
// Schedule the event
wp_schedule_event(time(), 'hourly', 'old_event_delete');
}
}
请尝试以下代码。
function get_delete_old_events() {
$past_query = date('Y-m-d', strtotime('-1 day'));
// WP_Query arguments
$args = array(
'fields' => 'ids', // Only get post ID's to improve performance
'post_type' => array('event'), //post type
'posts_per_page' => '-1',//fetch all posts,
'meta_query' =>array(
'relation' => 'AND',
array(
'key' => 'gid_22',
'value' => $past_query,
'compare' => '<='
)
)
);
// The Query
$query = new WP_Query($args);
// The Loop
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// do something
$headers[] = 'From: SITENAME <[email protected]>';
$postid = get_the_ID();
$post = get_post($postid);
$author = get_userdata($post->post_author);
$subject = "SUBJECT: ".get_the_title()."";
$message = "THE MESSAGE BODY";
wp_mail($author->user_email, $subject, $message, $headers);
wp_trash_post($id);
}
} else {
// no posts found
return false;
}
// Restore original Post Data
wp_reset_postdata();
}
wp_mail
函数返回布尔(见Wordpress Documentation here)。所以,它退出函数,因为它在第一次迭代中返回值。
的wp_mail
$is_sent = wp_mail($author->user_email, $subject, $message, $headers);
它应该工作,然后前只需添加一个变量。
谢谢,但它还没有工作。也许我们需要存储其他变量呢? – Cray
嗯,可能是。请检查WP文档。如果他们返回一些东西,而不是由某个变量处理,那么你可能需要。 –
您的代码似乎必须正常工作。你可以在编辑邮件功能之前分享运行良好的代码吗? –
工作正常的代码与我的问题中的代码相同。除了注释部分“开始电子邮件”和“结束电子邮件”之间的代码 – Cray
也许你需要使用重置数据功能让我分享代码 –