web-dev-qa-db-ja.com

特定の時間に一度関数を実行する

当社の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()を詳しく調べましたが、それを正しく使う方法を理解するようには思えません。

誰かがこれに光を当てることができればそれは大歓迎です

敬具!

1
Rick Spanjers

つまり、要点は、あなたが自分の機能を持っていて、それをアクションにフックしてから、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 で詳細を参照してください。

1
FaCE