当社のWordPress Webサイトでは、Events Manager Proプラグインを使用しています。これにより、イベントを作成できます。ただし、イベント終了日の1日後に、なんとかしてお礼のEメールを出席者に送信する必要があります。
私はすでにこれを書きました:
add_action( 'em_bookings_added', 'mail_after_completion' );
function mail_after_completion (){
global $wpdb;
/*Get the email of who booked */
$person_id = $wpdb->get_var("SELECT person_id FROM mbc_em_bookings ORDER BY booking_date DESC LIMIT 1");
$person_email = $wpdb->get_var( $wpdb->prepare("SELECT user_email FROM mbc_users WHERE ID = %s",$person_id));
/*Get the event finish date */
$event_id = $wpdb->get_var("SELECT event_id FROM mbc_em_bookings ORDER BY booking_date DESC LIMIT 1");
$event_end_date = $wpdb->get_var( $wpdb->prepare("SELECT event_end_date FROM mbc_em_events WHERE event_id = %s",$event_id));
/*Send E-mail to the person who just booked */
$to = '$person_email';
$subject = "Thank you for attending";
$content = "Thank you for attending the event at $event_end_date";
$status = wp_mail($to, $subject, $content);
}
?>
この機能は、イベントを予約するたびにEメールを送信します。しかし、私はイベントが完了した1日後にこれが起こることを望みます。私はCRONとwp_schedule_single_event()
を詳しく調べましたが、それを正しく使う方法を理解するようには思えません。
誰かがこれに光を当てることができればそれは大歓迎です
敬具!
つまり、要点は、あなたが自分の機能を持っていて、それをアクションにフックしてから、WordPressにそのアクションをスケジュールどおりに起動するように指示することです。あなたに利用可能である内蔵スケジュールは以下のとおりです。
hourly
twicedaily
daily
毎時イベントを開始したい場合は、次のようにします。
<?php
wp_schedule_event(time(), 'hourly', 'em_bookings_added');
特定の時間にタスクを実行したい場合は、最初の引数としてunixタイムスタンプを渡すことができます。
<?php
$future_time = mktime(10,0,0,30,9,2016); // 2016-09-30 10:00:00 UTC
wp_schedule_event($future_time, 'hourly', 'em_bookings_added');
自分の行動に渡したい引数がある場合は、それらを4番目の引数として渡すことができます。
like実行する時間を指定することもできます - これが最初の引数です。ただし、WordPressのcronは、実行するサイトを訪れる人々に依存しており、実際のcronの仕事ほど正確ではありません。訪問者なし== cronは実行されていません。
しかし、これを回避する1つの方法は、手動でwp-cron.php
を起動するようにcronジョブを自分のサーバーに設定することです。
Tom McFarlinのWordPress cronに関する素晴らしい 記事からの引用
// wp-config.php
define('DISABLE_WP_CRON', true);
// in your crontab
/15 * * * wget -q -O - http://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
https://codex.wordpress.org/Function_Reference/wp_schedule_event で詳細を参照してください。