2013-11-25 4 views
0

나는이 질문을 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 
} 
+0

큰 소리로 여기에서 생각해보십시오 ... 어떻게 든 나는 각 이메일에 대해 어떻게 든 쿼리를 반복해야하는지 궁금합니다. foreach 문 안에 전자 메일 작업이 있습니다. 아마도이 오류에 접근하고 있습니까? – RiotAct

답변

1

을보고 시작 부분에 IF 문에서 정확한 날짜를 사용하고 있습니다 당신이 보낸 사용자를 질의 한 후 바로 반복하십시오. 그 루프 안에서는 메시지에 대한 변수를 선언하고 전자 메일을 보내야합니다. 이렇게하면 각 사용자를 단계별로 보내고 보낼 수 있습니다.

+0

좋아, 코딩을 시작하기 전에 바로 잡아 보자. 그러면 새로운 루프가 사용자 쿼리 안에있다. 또는 해당 쿼리가 끝난 직후에? – RiotAct

+0

좋아, 나는 그것을 작동 시켰어 ... 여기 내 문제가 어디에 있었 : 전자 메일 기능 전에 메일 필터를 가지고, 일단 내가 그것을 밖으로 이동, shazam! 그것은 작동합니다! 팁 주셔서 감사! – RiotAct

관련 문제