リモート開発メインのソフトウェア開発企業のエンジニアブログです

WordPress の投稿が保存できない原因のうち珍しいものを2つ紹介

最近、WordPress プラグインをリリースしたり、WordPress をよく触っている。弊社がリリースした WordPress プラグインは以下を参照。

宣伝はそのくらいにしておき本題に入る。

WordPress の投稿が保存できない原因・症状は多種多様

WordPress の投稿を保存するときにエラーで保存が出来ない事がある。エラーの原因となり得る事柄は多岐にわたり、「WordPress 投稿 保存できない」とかで検索すると大量の情報が出てくる。

また、一言で「保存できない」と言っても、画面が反応しない、画面上部に赤いエラーメッセージが出る、HTTP サーバーのエラー画面が出る、など症状は色々ある。

今回は、私が最近遭遇したエラーのうち、他のページではあまり触れられていない原因のものを2つ紹介する。症状としてはどちらも画面上部に赤いエラーメッセージが出るパターン。

Moba Pro

珍しい原因1: テーブルの文字コード

エラー原因の説明

個人のブログもいくつか持っていて(探さないでください)、そのうちの1つは大分前にレンタルサーバーにインストールした WordPress。WordPress 自体は適宜アップグレードしていて最新バージョンになっているが、問題は MySQL のテーブル。

先に原因を書くと、テーブル・カラムの文字コードが utf8mb3 になっていたため。(collation は utf8mb3_general_ci だった。)絵文字とかを保存しようとするとエラーになる🔥

対処方法

対処方法としては、以下の通り。

  1. 念のため DB のバックアップを取得しておく
  2. 既存テーブルの文字コードを変更する
  3. DB の文字コードを変更する(今後作成されるテーブルのデフォルトとなる)
  4. wp-config.php の設定を変える

既存テーブルの文字コード変更は以下の通り。ちなみに、エンジンが MyISAM (懐かしい・・・)だったので、これも合わせて変更した。

-- これを各テーブルについて実施する
ALTER TABLE `wp_comments`
  ENGINE=InnoDB,
  CONVERT TO CHARACTER SET utf8mb4
  COLLATE utf8mb4_0900_ai_ci;

DB の文字コードも一応変更しておく。

ALTER DATABASE `db_name`
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_0900_ai_ci;

最後に wp-config.php を以下のように修正。

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8mb4');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', 'utf8mb4_0900_ai_ci');

珍しい原因2: プラグインの不具合

冒頭で宣伝したプラグイン2つはどちらも、投稿の保存時に hook を使って投稿内容を API サーバーなり Amazon Bedrock なりに送るような処理を入れている。実装に興味がある方は以下のドキュメントや前述のプラグインのソースをみて確認して欲しい。

Action Reference – Common APIs Handbook | Developer.WordPress.org

さて、その hook にて呼び出されるコードでエラーが発生すると投稿の保存が出来ない。これはプラグイン開発中に何度か発生した。

得られる教訓としては、急に投稿の保存が失敗するようになったら、最近インストールしたプラグインを無効化してみると切り分けがしやすい。

まとめ

WordPress は長い歴史があり膨大な数のプラグインがあり、インストールされている環境も多種多様なので、投稿が保存できない場合でも様々な要因が考えられる。

本投稿では、比較的珍しい原因について2つ紹介した。どなたかの参考になれば幸い。

← 前の投稿

【乗っ取り対策】X(旧Twitter)の権限について

次の投稿 →

Reduce the cost of OpenSearch Serverless in development

コメントを残す