ワードプレスでwp_cronで実行の自作プラグインを作りましたが定時起動しません。

そこで、定時起動してテストメールを送信、というだけのスクリプトを教えてください。

それで自分に定時にメールが送られれば、定時起動の部分を流用させて頂きたく思います。
可能であれば10分毎でお願いします。

「ワードプレス プラグイン Cronで起動」でGoogle検索した1ページめのサイトは見ましたが、未熟なもので動作に至りませんでした。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/10/05 15:05:47
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント50pt

「ワードプレス プラグイン Cronで起動」での検索結果1件目(※「http://dogmap.jp」?)で紹介されている方法で動作します。
以下を利用しているテーマのfunctions.phpに記述します。

define('CRON_SCHEDULE_HANDLER', '登録するイベントのフック名'); // 定数は「CRON_SCHEDULE_HANDLER」でなくても大丈夫です。好きな名前に変更したら、コード内の定数も同じに変更します。
// wp-cron で実行させたい処理
function cron_schedule_handler() {
	// ここに実際の処理を記述
	echo "This is test for wp-cron schedule."; // wp-cron.phpに直接アクセスしていると表示されます。サイトアクセス時には表示されません。
	wp_mail('xxxxx@mail.example.jp', 'メールの件名', 'メールのメッセージ本文');

	// 指定時間後に再度起動
	$time_interval = 10 * 60; // 10分待つのが面倒な場合は、「2 * 60」など短くして確認してみてください。
	wp_schedule_single_event(time() + $time_interval, CRON_SCHEDULE_HANDLER);
}

// wp-cron でスケジュールされていなければ、スケジュール登録
$crons = _get_cron_array();
$enabled = false;
//wp_clear_scheduled_hook(CRON_SCHEDULE_HANDLER); // 動作が上手くいかなかった時は、ここを一旦有効にして実行し、登録済みの同じ名前のイベントを削除してから、再度コメントアウトしてから実行してください。(※新規に登録されるようにします。)
foreach ( $crons as $time => $tasks ) {
	foreach ( $tasks as $procname => $task ) {
		if ($procname === CRON_SCHEDULE_HANDLER) {
			$enabled = true; break;
		}
	}
	if ($enabled) break;
}
if (!$enabled)
	wp_schedule_single_event(time(), CRON_SCHEDULE_HANDLER);
unset($tasks); unset($crons);

// スケジュール実行
add_action(CRON_SCHEDULE_HANDLER, 'cron_schedule_handler');


動作確認の方法が上手くない部分があったのではないかと思いますが、メール送信で確認したでしょうか?
wp-cron.phpはバックグラウンドで動作するようですので、文字列等表示の場合は動作している事を視認できません。(※wp-cron.phpに直接アクセスして実行した場合、文字列等表示でも動作を確認できます。)
Apacheのログを確認できる場合、アクセスログを確認してみてください。
wp-cron.phpが実行されたアクセスは、「"POST /wp-cron.php?doing_wp_cron=実行時のタイムスタンプ HTTP/1.0"」のように記録されます。
指定した時間単位(※アクセスがあった時)で実行されている事が分かると思います。

このようなプラグインもありました。
まだ動作確認していませんが、利用できるかもしれません。
「WP-Crontrol」
http://wordpress.org/extend/plugins/wp-crontrol/
※デフォルトの1時間、1日2回、1日の他に、5分単位など任意のスケジュール「cron schedules」が登録できるようです。
http://wordpress.org/extend/plugins/wp-crontrol/screenshots/

その他の回答1件)

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351ここでベストアンサー

ポイント50pt

「ワードプレス プラグイン Cronで起動」での検索結果1件目(※「http://dogmap.jp」?)で紹介されている方法で動作します。
以下を利用しているテーマのfunctions.phpに記述します。

define('CRON_SCHEDULE_HANDLER', '登録するイベントのフック名'); // 定数は「CRON_SCHEDULE_HANDLER」でなくても大丈夫です。好きな名前に変更したら、コード内の定数も同じに変更します。
// wp-cron で実行させたい処理
function cron_schedule_handler() {
	// ここに実際の処理を記述
	echo "This is test for wp-cron schedule."; // wp-cron.phpに直接アクセスしていると表示されます。サイトアクセス時には表示されません。
	wp_mail('xxxxx@mail.example.jp', 'メールの件名', 'メールのメッセージ本文');

	// 指定時間後に再度起動
	$time_interval = 10 * 60; // 10分待つのが面倒な場合は、「2 * 60」など短くして確認してみてください。
	wp_schedule_single_event(time() + $time_interval, CRON_SCHEDULE_HANDLER);
}

// wp-cron でスケジュールされていなければ、スケジュール登録
$crons = _get_cron_array();
$enabled = false;
//wp_clear_scheduled_hook(CRON_SCHEDULE_HANDLER); // 動作が上手くいかなかった時は、ここを一旦有効にして実行し、登録済みの同じ名前のイベントを削除してから、再度コメントアウトしてから実行してください。(※新規に登録されるようにします。)
foreach ( $crons as $time => $tasks ) {
	foreach ( $tasks as $procname => $task ) {
		if ($procname === CRON_SCHEDULE_HANDLER) {
			$enabled = true; break;
		}
	}
	if ($enabled) break;
}
if (!$enabled)
	wp_schedule_single_event(time(), CRON_SCHEDULE_HANDLER);
unset($tasks); unset($crons);

// スケジュール実行
add_action(CRON_SCHEDULE_HANDLER, 'cron_schedule_handler');


動作確認の方法が上手くない部分があったのではないかと思いますが、メール送信で確認したでしょうか?
wp-cron.phpはバックグラウンドで動作するようですので、文字列等表示の場合は動作している事を視認できません。(※wp-cron.phpに直接アクセスして実行した場合、文字列等表示でも動作を確認できます。)
Apacheのログを確認できる場合、アクセスログを確認してみてください。
wp-cron.phpが実行されたアクセスは、「"POST /wp-cron.php?doing_wp_cron=実行時のタイムスタンプ HTTP/1.0"」のように記録されます。
指定した時間単位(※アクセスがあった時)で実行されている事が分かると思います。

このようなプラグインもありました。
まだ動作確認していませんが、利用できるかもしれません。
「WP-Crontrol」
http://wordpress.org/extend/plugins/wp-crontrol/
※デフォルトの1時間、1日2回、1日の他に、5分単位など任意のスケジュール「cron schedules」が登録できるようです。
http://wordpress.org/extend/plugins/wp-crontrol/screenshots/

id:taroe No.2

回答回数1099ベストアンサー獲得回数132

ポイント50pt

wp_cron 関数は、
CRON動作するものでなくて
ブログ(Wordpress)にアクセスがあった時に、
設定した時間を経過していて、まだ実行されていないときに
実行されるものだからです。


はてなアンテナに自分のブログを登録すれば
1日に1-3回ぐらいは呼び出してくれると思います。

-------
もしくは、
Cronが使えるサーバーを使っているのなら、

Cronでwgetで、自身のブログを定期的に呼び出せば、
wp_cronを利用した自作のプラグインを変更を最小限で実現できます。

Cronで
/usr/local/bin/wget http://あなたのブログ/

みたいな感じで呼び出すだけです。

  • id:rouge_2008
    wp-cronを使う方法だと、サイトへのアクセスがないと動作しませんが、その辺りは大丈夫でしょうか?
    10分に1回は必ずアクセスがあるのでしたらwp-cronでも大丈夫ですが、時間帯によってアクセスがまったく無い事がある場合などは、通常のcronで起動した方がいいかもしれません。
  • id:iori753
    アクセスがありますし、WASSUPというリアルタイムアアクセス解析を見たりするためにずっと管理画面を開きっぱなしにすることもあります。
    ですがスクリプトも問題なく動くものなのに、wp-cronでは起動しないのです。
    PHPの経験が浅いので、フックとかが間違っているのかもしれないとおもいご質問させて頂きました。
  • id:fut573
    環境はどうなっています?
    nginxとかではデフォルト設定ではwp-cron動かなかった気がしますが。
  • id:iori753
    ありがとうございます。
    nginxかはわからないのですが、
    http://hostgator.com/shared.shtml
    こちらのサーバを使用しておりますが、例えば「WASSUP リアルタイムAnalytics」というような名前の、ブラウザアクセスしていれば一定秒ごとに画面更新するアクセス解析プラグイン等は動いています。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません