2016-10-27 235 views
2

我寫了下面的函數,當發佈帖子時將通過電子郵件發送給每個用戶。它工作得很好,但我遇到的問題是,由於需要通過while循環運行的次數,發佈帖子可能需要一些時間。目前有110名成員。在WordPress中延遲循環

現在對於我的問題,是否有一個簡單的方法來延遲這個過程,以便後可以發佈然後電子郵件發送功能是在後臺照顧作爲一項任務?

function send_email_notifications() { 
    $args = array(
     'post_type' => 'members', 
     'orderby' => 'title', 
     'order' => 'ASC', 
     'posts_per_page' => -1, 
     'post_parent' => 0, 
     'post_status' => array('pending', 'draft', 'publish'), 
    ); 

    $emailSearch = new WP_Query($args); 

    if(isset($_REQUEST['send_email_notification'])) { 
     if($emailSearch->have_posts()) { 
      while($emailSearch->have_posts()) { 
       $emailSearch->the_post(); 

       wp_mail('[email protected]', 'Test', 'Test'); 
      } 
     } 
    } 
} 
add_action('publish_notifications', 'send_email_notifications', 10, 2); 
+1

當然。 「工作調度程序」就是你正在尋找的。 – arkascha

回答

2

您可能會發現WordPress Cron有用。在你publish_notifications()功能,你可以有:

$args['subject'] = //something 
$args['message'] = //something else 
$args['to']  = //an email address 

wp_schedule_single_event(time() + 3600, 'email_about_post', $args); 

然後在其他地方,你可以有這樣的:

function email_about_post_function($args) { 
    wp_mail($args['to'], $args['subject'], $args['message']); 
} 
add_action('email_about_post','email_about_post_function'); 

警告 - 我沒有測試這個特殊的代碼。閱讀更多信息https://codex.wordpress.org/Function_Reference/wp_schedule_event

+0

感謝您的指導,詹姆斯。進一步觀察了wp_schedule_single_event函數,我認爲這正是我正在尋找的。 –