「WordPressで予約投稿を00:00に設定したのに、実際には1:00に公開されてた…」 そんな経験、ありませんか?
サーバーのcronはピッタリ動いているのに、WordPressだけ1時間ズレる。 これ、実はWordPressとcronが“別の時間の世界”で動いているのが原因です。
1. 原因:WordPressとcronは「時間の基準」が違う
WordPressは内部で「UTC(世界標準時)」を基準に動作します。 一方、cronやOS・PHP・MariaDBは「JST(日本時間)」で動くのが普通です。
つまり──
WordPressは“世界時間”、cronは“現地時間”で動いている。
このズレが、1時間(または9時間)違って見える原因です。
| レイヤー | 設定 | 備考 |
|---|---|---|
| OS | Asia/Tokyo | JST(日本時間)でOK |
| PHP | date.timezone = Asia/Tokyo | /etc/php.iniで設定 |
| MariaDB | default_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_gmt が post_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やん」によって作成されました。


コメント