나는이 질문을 WordPress의 답변에 게시했지만 몇 일 후에 응답이 없으므로 여기에 게시 할 것입니다.wp_cron을 사용하여 대량 메일을 보내려면
저는 매월 1 일에 반복 송장을 보내려면 맞춤 플러그인을 개발 중입니다. 지금까지 플러그인은 꽤 잘 작동하고 있습니다. 주문에 따라 각 사용자에 대해 새로운 인보이스를 만들고 1 개의 이메일을 보냅니다. 그러나 모든 사용자가 아니라 쿼리의 마지막 전자 메일 주소로 1 개의 전자 메일 만 보냅니다. 그래서 내 현재 기능입니다, 어쩌면 누군가가 wp_mail을 사용하여 각 사용자에게 개별 이메일을 보내도록 할 수있는 것을 볼 수 있습니다.
참고 **이 테스트 단계에있다, 그래서 당신은이 필요합니다 ... 이메일 및 송장이 생성 될
function mps_send_annual_notification() {
// START BY CHECKING THE DATE...
// WE ONLY WANT TO RUN THIS ON THE 1ST OF EACH MONTH
date_default_timezone_set('America/Chicago');
$cron_date = date('m-d');
// BEGIN DATE VERIFICATION
if ('11-21' == $cron_date) {
// GET THE USERS AND INFO FOR RECURRING ORDERS
global $post;
$args = array(
'post_type' => 'purchase',
'posts_per_page' => -1,
'meta_query' => array(
array (
'key' => 'purchase_cycle',
'value' => 'Annually Recurring',
'compare' => '='
)
)
);
$myposts = get_posts($args);
foreach($myposts as $post) : setup_postdata($post);
$client = get_post_meta($post->ID, 'purchase_user', true);
$email = get_post_meta($post->ID, 'purchase_user_email', true);
$service = get_post_meta($post->ID, 'purchase_service', true);
$price = get_post_meta($post->ID, 'purchase_price', true);
$timestamp = date('Ymd');
$today = date('m-d-Y');
// CREATE A TITLE BASED ON USER NAME, THE MEMBERSHIP TYPE, AND THE DATE
// Turn User Name into Initials
$words = explode(' ', $client);
$acronym = '';
foreach ($words as $w) {
$acronym .= $w[0];
}
// Turn Service into Initials
$svc = explode(' ', $service);
$svc_letters = '';
foreach ($svc as $value) {
$svc_letters .= $value[0];
}
$title_date = date('YmdHis');
$invoice_title = $acronym.$title_date.$svc_letters;
// CREATE AN INVOICE
$invoicepost = array(
'post_status' => 'publish',
'post_title' => $invoice_title,
'post_type' => 'invoice',
'post_author' => 1);
remove_action('mps_cron_hook_example', 'mps_update_message');
$pid = wp_insert_post($invoicepost);
// ADD THE INVOICE META
add_post_meta($pid, 'invoice_user', $client, true);
add_post_meta($pid, 'invoice_user_email', $email, true);
add_post_meta($pid, 'invoice_date', $today, true);
add_post_meta($pid, 'invoice_due_date', $today, true);
add_post_meta($pid, 'invoice_timestamp', $timestamp, true);
add_post_meta($pid, 'invoice_total_due', $price, true);
add_post_meta($pid, 'invoice_balance', $price, true);
add_post_meta($pid, 'invoice_description', 'Annual Membership Dues', true);
add_post_meta($pid, 'invoice_type', 'Dues', true);
add_post_meta($pid, 'invoice_name', $service, true);
// SET MAIL FILTERS
add_filter ("wp_mail_content_type", "cron_invoice_mail_content_type");
function cron_invoice_mail_content_type() {
return "text/html";
}
add_filter ("wp_mail_from", "cron_invoice_mail_from");
function cron_invoice_mail_from() {
return "[email protected]";
}
add_filter ("wp_mail_from_name", "cron_invoice_mail_from_name");
function cron_invoice_mail_from_name() {
return "Website Name Goes Here";
}
// CREATE EMAIL MESSAGE
$email_subject = 'You Have a New Invoice';
ob_start(); ?>
<html>
<head>
</head>
<body>
<p>
Hi <?php echo $client; ?>!
</p>
<p>
Message to user goes here...
</p>
<p> Invoice Number: <?php echo $invoice_title; ?><br />
Invoice Date: <?php echo $today; ?><br />
Invoice Due Date: <?php echo $today; ?><br />
Account Status: <?php echo $service; ?><br />
Amount Due: <?php echo $price; ?><br />
</p>
<p> <a href="link to invoice">View your invoice online.</a>
<p>
Sincerely,<br />
Website Name Goes Here
</p>
<p>
<center>This message was automatically generated by the online account management system.</center>
</p>
</body>
</html>
<?php // SEND THE MESSAGE
$message = ob_get_contents();
ob_end_clean();
wp_mail($email, $email_subject, $message);
// end the beginning query
endforeach;
} // END OF DATE VERIFICATION
}
큰 소리로 여기에서 생각해보십시오 ... 어떻게 든 나는 각 이메일에 대해 어떻게 든 쿼리를 반복해야하는지 궁금합니다. foreach 문 안에 전자 메일 작업이 있습니다. 아마도이 오류에 접근하고 있습니까? – RiotAct