WordPressの疑似CRONで決まった日時に1回だけメールを送る方法

12月です!クリスマスやお正月などいろいろなイベントが盛りだくさんの季節になってきました。クリスマスカードや年賀状などをあらかじめ作っておいて、その日になったら送るということをWordPressでできないかと考えて見ました。
WordPressに備わっている疑似CRONの方法でどのようにしたらそういうメールが送れるのか試してみました。それについて書きます。

WordPressの機能疑似クーロンの使い方 1回だけ行うつもりが永久ループってる?

検索してこちらのページをみつけました

WordPressで擬似cronを使ってバッチ処理を定期実行させる方法

コワーキングスペース7Fのユースケさんの記事でした(^^)/

この例だと daily で毎日送られてしまうため、1回だけ実行できる方法はないのかなーと検索して、

wp schedule single event

という関数を発見しました。そこで、ユースケさんのコードの関数をこれに置き換えて、使っている子テーマの functions.php に

 

このコードを追加してサーバーにアップロード、そしてメールボックスを開いてみると…

きゃぁぁ~(>_<)、やばい…ループしている。プログラマが一番恐れているそれが発生していました。慌ててコードを削除したfunctions.phpをアップロードしてメールを止めました。

先ほどのCodex

 

こんな感じでサンプルが書いてあり、「その関数はユーザーが何かを行ったときだけ実行されるものにしましょう そうしないとページ訪問のたびに毎回新しいイベントが登録されます」のようなコメントがありました。
 

と書いてあるから大丈夫と思ったのだけど、もしかすると1度だけ行うので逆に 1度行うとスケジュールが削除される→スケジュールがないから登録 のループになっているのかな、、と思いました。

WP Controlというプラグインをインストールしてみる

そこで、ユースケさんのblogで紹介されていた、WordPressで登録済みのスケジュールを見たり、スケジュールを登録できるプラグイン WP Control を入れてみます。

ダッシュボード プラグイン>新規追加 で



WP Control
 と入力してリターン。このとき WP Control の大文字を小文字にしちゃうとなかなかこのプラグインが見つからないのでご注意ください。

今すぐインストール をクリック

プラグインを有効化 をクリック

これでインストールできました。このプラグインを使うには、

ダッシュボード プラグイン>インストール済みプラグイン をクリック

WP Controlの所にある Cron Events をクリックします

すると、WordPressやプラグインに入っているCRONが一覧表示されます。

良くある使い方で 設定 から使おうとすると



Cron Schedules

しかありませんので、これは新しい単位のスケジュールを追加する画面

になってしまいます。これだと自分のCRONを登録する画面ではありませんので面倒ですがインストール済みのプラグインからCron Eventsを選びます。

WP Controlを使って1度だけ動かすCRONを追加してみる

1度だけ動かす部分をWP Controlに任せたいのでfunctions.php
 

これだけにします。ここではまだアクションが追加されただけなのでこれをアップしてもメールは送られません。

プラグイン>インストール済みのプラグイン WP Control のCron Events をクリック

この画面の下の方にある Add Cron Event にこのように入力します。

Hook name : add_actionで指定したHook name
Next run (UTC): 実行させたい年月日時刻 を入れます UTC(世界標準時)なのですが、ローカルタイムで指定してその時間に実行されました
Event schedule: は Non-repeating 繰り返さない

こんな感じです。

Add Cron Event
 をクリック

Successfully created the cron event sample_add_cron

と表示され、一覧に追加したイベント sample_add_cron が入っています。実行されるまでの残り時間も表示されています。

読み直してみるとさらに実行されるまでの時間が短くなります。あと10秒…

10秒が過ぎた頃に読み直すと一覧から sample_add_cron が消えていました。

メールを見てみると

このように届いていました(^^)/。その後何度かメールを見ましたが、メールはこの1通だけでした。成功したようです!

メールの送信元を変える

受け取ったメールなのですが送信元が WordPress になってしまっています。返信しようとすると、
wordpress@ryus.co.jp という存在しないメールアドレス宛になってしまうので、ここを修正しようと思います。また、実際に使うイメージのタイトルと本文にしてみます。

このようにfunctions.phpを書き換えます。その後、同じようにCRONのスケジュールを登録してメールを受け取ってみると、

こういう感じのメールが届きました。fromの名前が指定されたものになっています。返信先もfromのメールアドレスになりました。

まとめ:疑似CRONとWP Controlでいろいろできそうですね

疑似CRONはWordPressにアクセスがあったときに動くので、本物のCRONのようにアクセスがなくても動くものではありません。しかし、動かしたいときにサイトを表示させればいいのでこのへんは割り切って使いたいと思います。アクセスが多いサイトならあまり気にすることもないかもしれません。

またWP ContolではCron Schedulesで、新しい単位を追加できるので1年などの単位で追加して、お誕生日カードを毎年送るとかいろいろなメールを送るアイデアが湧いてきました(^^)/

[Amazon sponsored link] PHPプログラム 関連本
兎本美佳

ブログを見た人がそのままできたらいいなと思って、できるだけ丁寧に書いています。blogに書いたようなネタの有償対応のご相談は「ゆうそうと」へいただければと思います(^^)/
無償での対応をご希望の場合は、コメントをいただけましたら可能な場合はコメントを返させていただきます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサー広告
ブログをメールで購読

メールアドレスを記入して購読すれば、更新をメールで受信できます。

261人の購読者に加わりましょう

トップへ戻る