⏰ WordPressの予約投稿が1時間ズレる?──cronとの時刻の違いを徹底解説

WordPress/サーバー設定

「WordPressで予約投稿を00:00に設定したのに、実際には1:00に公開されてた…」 そんな経験、ありませんか?

サーバーのcronはピッタリ動いているのに、WordPressだけ1時間ズレる。 これ、実はWordPressとcronが“別の時間の世界”で動いているのが原因です。


1. 原因:WordPressとcronは「時間の基準」が違う

WordPressは内部で「UTC(世界標準時)」を基準に動作します。 一方、cronやOS・PHP・MariaDBは「JST(日本時間)」で動くのが普通です。

つまり──

WordPressは“世界時間”、cronは“現地時間”で動いている。

このズレが、1時間(または9時間)違って見える原因です。

レイヤー設定備考
OSAsia/TokyoJST(日本時間)でOK
PHPdate.timezone = Asia/Tokyo/etc/php.iniで設定
MariaDBdefault_time_zone = 'Asia/Tokyo'前回の隠し呪文で解決
WordPress一般設定 → タイムゾーン「東京」UTC+9ではなく「都市名」指定が正解

2. 症状の確認:投稿時刻の中身を見てみよう

WordPressの予約投稿時刻は、DB上で2種類保存されています。

post_date → 日本時間(表示用)
post_date_gmt → 世界標準時(内部用)

確認コマンド:

wp post get <投稿ID> --fields=post_date,post_date_gmt

post_date_gmtpost_date より9時間早ければ正常です。 つまり「ズレて見えるけど、内部的には正しい」状態です。


3. 修正ステップ:全レイヤーの時間を揃える

① PHPのタイムゾーン確認

php -i | grep "Default timezone"

出力が Asia/Tokyo でなければ、/etc/php.ini に追記:

date.timezone = Asia/Tokyo

② MariaDBの設定(重要)

確認コマンド:

SHOW VARIABLES LIKE '%time_zone%';

Asia/Tokyo になっていなければ、 /etc/my.cnf.d/server.cnf に追記して再起動:

[mysqld]
default_time_zone = 'Asia/Tokyo'

もし Unknown time zone 'Asia/Tokyo' エラーが出た場合は、 こちらの関連記事を参照👇

👉 🕰️ MariaDBの時間がズレる?──Tokyoを教える「隠し呪文」mysql_tzinfo_to_sqlの話

③ WordPressの設定

管理画面 → 設定 → 一般 → 「タイムゾーン」を 「東京」 に設定。

「UTC+9」ではなく「都市名」指定にすると、夏時間(DST)や将来の仕様変更にも対応できます。


4. wp-cronの落とし穴

WordPressの予約投稿は「疑似cron(wp-cron.php)」によって動作します。 実際には「アクセスがあった時に処理される」仕組みなので、 アクセスが無い夜中などは1時間以上遅れて動くことがあります。

対策は、サーバーのcronでWordPressのcronを直接叩くこと👇

*/5 * * * * /usr/local/bin/wp-a --path=/var/www/html/wpm cron event run --due-now

こうすることで、予約投稿が正確な時刻に動作します。


5. まとめ:「WordPressは世界時間、cronは現地時間」

  • WordPressは内部的にUTC(世界時間)を使用
  • PHP / MariaDB / OS はJST(日本時間)で動作
  • 全てのレイヤーを Asia/Tokyo に統一すればズレは解消
  • wp-cron は疑似cronなので、サーバー側cronで補完するのがベスト

これで、あなたの予約投稿はピッタリ00:00に動くようになります🕛✨


🔗 関連記事


📩 info@hd0.biz
この記事は「masaやん」によって作成されました。

コメント