タグアーカイブ 予約投稿

WP to Hootsuite 3.xで予約投稿が失敗するCronエラーの対処法

WP to Hootsuite 3.xで予約投稿が失敗するCronエラーの対処法

WP to Hootsuite を 3.x 系へ更新したあと、予約投稿が Hootsuite に公開されない場合は、Cron クラスの reschedule_refresh_token_event メソッドが未定義のままになっている可能性が高い。プラグインを 3.1.4 以降へ更新すれば、この致命的エラーは解消する。

なぜWP to Hootsuite 3.xで予約投稿が失敗するのか

なぜWP to Hootsuite 3.xで予約投稿が失敗するのか

この不具合は、プラグインの更新時に必要なメソッド定義がファイルへ正しく反映されず、呼び出しだけが先に組み込まれた状態で発生する。3.x 系では WPZinc 製プラグイン共通の Social ライブラリへ構成が変わったため、一部のファイルに古いコードと新しいコードが混在しやすくなっている。

具体的には、includes/functions.php が Cron クラスの reschedule_refresh_token_event メソッドを呼ぶ一方、lib/social/includes/class-cron.php にそのメソッド定義がない。存在しないメソッドへの呼び出しは PHP の致命的エラーを引き起こし、その後の処理が止まる。

WPZinc\Social\Cron::reschedule_refresh_token_event()

予約投稿の実行は WP-Cron(WordPress の予約実行システム)を経由する。ここで致命的エラーが起きると画面には何も表示されず、プラグイン自身のログ画面にも記録が残らない。管理画面からの手動更新はトークン再スケジュール処理を通らないため成功するので、問題の特定が遅れやすい。

予約投稿が公開されない流れ
予約時刻 WP-Cron が予約投稿を実行する
処理 functions.php が reschedule_refresh_token_event を呼ぶ
エラー class-cron.php に該当メソッドがない
結果 致命的エラーで処理停止、Hootsuite に公開されない
エラー発生箇所  正常な入り口

上の図は、予約投稿が致命的エラーで止まるまでの流れを示している。

プラグインのログ画面が空のままなのは、致命エラーが起きた時点で PHP の処理が停止し、ログを書き込むコードまで到達しないためだ。管理画面からの手動更新ではトークン再スケジュール処理が呼ばれないため、問題なく成功する。

3.1.4以降への更新で解消する手順

3.1.4以降への更新で解消する手順

この不具合はプラグイン側のコード不整合なので、特別な設定変更は不要だ。WP to Hootsuite を 3.1.4 以上へ更新すると、未定義だったメソッドが class-cron.php に追加され、予約投稿の処理が最後まで走るようになる。

更新作業の前に、必ずサイト全体のバックアップを取る。プラグイン更新そのものは数分で終わるが、万一テーマや他プラグインと競合した場合に戻せる状態にしておくことが重要だ。

STEP 1 サイト全体のバックアップを取得する
STEP 2 管理画面のプラグイン一覧で WP to Hootsuite を更新する
STEP 3 バージョンが 3.1.4 以上であることを確認する
STEP 4 失敗した予約投稿を再スケジュールして動作確認する

上のステップは、更新から動作確認までの一連の流れを示している。

更新後はキャッシュ系プラグインの全削除も忘れずに行う。そのうえで、以前に失敗した投稿を一度下書きへ戻すか、公開予定日時を再設定して様子を見ると確実だ。

すぐに更新できない場合はどう対処するか

すぐに更新できない場合はどう対処するか

2.x系へ巻き戻して様子を見る

何らかの事情ですぐに 3.1.4 へ更新できない場合は、動作していた 2.x 系へ巻き戻すのが安全だ。WP Rollback などのプラグインを使うか、FTP で該当プラグインのフォルダを旧バージョンに差し替える。ただし、旧バージョンには以降のセキュリティ修正が含まれない点には注意が要る。

手動公開に切り替えて一時運用する

致命的エラーは予約投稿の実行時に発生するため、更新が終わるまで予約投稿を避け、公開したいタイミングで管理画面から手動で公開する運用も現実的な選択だ。下書きのまま用意しておき、公開直前に「公開」ボタンを押す流れにすると、サイト運営を止めずに済む。

ステージング環境で先に検証する

本番サイトへの更新が不安な場合は、ステージング環境(本番と同構成の検証用サイト)で先に 3.1.4 を適用し、予約投稿のテストを行う。これにより、他プラグインとの競合や認証トークンの再連携が必要かどうかを事前に確認できる。

デバッグログで原因を特定する手順

デバッグログで原因を特定する手順

プラグインのログ画面に何も残らない場合、PHP のデバッグログを有効にすると致命的エラーの内容が確認できる。本番サイトでは通常エラー表示が無効化されているため、管理画面にも何も出ない。

wp-config.php に次の記述を追加すると、エラー内容が wp-content/debug.log に書き込まれる。あらかじめ FTP または管理画面のテーマファイルエディタから wp-config.php を開いておく。

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

設定後にテスト用の予約投稿を実行し、wp-content/debug.log を確認する。未定義メソッドの場合、「Call to undefined method」(未定義メソッドの呼び出し)という趣旨のエラーが残る。日本語環境でも PHP の内部エラーは英語で記録される。確認後は、WP_DEBUG を false に戻してログ出力を止める。

よくある質問

3.1.4に更新しても予約投稿が失敗する場合は?

まずバージョン表記を確認し、本当に 3.1.4 以上へ置き換わったかを確かめる。そのうえでキャッシュを全削除し、Hootsuite との認証を一度解除して再接続する。それでも改善しない場合は、他プラグインとの競合を切り分ける。

更新ボタンが出てこない場合は?

プロ版や一括購入版では、管理画面の自動更新が効かないことがある。WPZinc の配布ページから最新版をダウンロードし、FTP で該当フォルダを上書きする。上書き前には必ずバックアップを取る。

WP-Cronが正しく動いているか確認するには?

WP Crontrol などのプラグインで予約イベントの一覧を確認し、投稿公開のイベントが登録されているかをチェックする。WP-Cron 自体が停止している場合は、サーバー側の cron 設定や wp-config.php の ALTERNATE_WP_CRON 設定を見直す必要がある。

デバッグログが出力されない場合は?

wp-content フォルダの書き込み権限が不足している可能性がある。FTP で wp-content のパーミッションを確認し、debug.log が作成できる状態か確かめる。あわせて、キャッシュ系プラグインやセキュリティプラグインが wp-config.php の変更をブロックしていないかも確認する。

2.xへ戻してもいいか?

一時的な回避として 2.x 系へ戻すのは有効だが、セキュリティ更新が含まれないため恒久対応にはならない。できるだけ早期に 3.1.4 以降へ更新し、検証のうえで運用を戻すのが望ましい。

この記事のポイント

  • 3.x 更新後に予約投稿が止まる原因は、呼び出しだけ存在する未定義メソッドによる致命的エラー
  • プラグインのログが空でも、PHP のデバッグログを有効にすれば原因が見える
  • 更新版 3.1.4 以降では Cron クラスのメソッド定義が揃い、予約投稿が正常に動く
  • すぐ更新できない場合は 2.x へ巻き戻すか、手動公開で一時運用する
  • 更新前のバックアップと、ステージング環境での事前検証が再発防止につながる