【脱Elementor】Elementorをアンインストールしたときにデータベースに残っている余分なデータを削除する方法【SQL】

最近は、Wordpressもクラシックエディタからブロックエディタへの移行が進んでいると思います。Webサイトリニューアルのさいに、Elementorを廃止してブロックエディタを使う方向に舵を切るサイトもあるんじゃないでしょうか。なんかデータを残しとくと色々問題があるので削除方法をメモ。

先に結論(分かってる人・急いでいる人向け)

データベースでバックアップを取ってから下記SQLを順次実行すれば削除できます。テーブル名は自分の環境に合わせて変えてください。(順番を変えると削除できないので順番が大切)

DELETE FROM `wp_postmeta` WHERE `post_id` IN (SELECT `ID` FROM `wp_posts` WHERE `post_type` = 'elementor_library');
DELETE FROM `wp_postmeta` WHERE `meta_key` = 'label' AND `meta_value` = 'sp';
DELETE FROM `wp_posts` WHERE `post_type` IN ('elementor_library');

あと末尾に状況確認用のSQLも置いときます。

以下、色々解説していきます。

Elementorのデータが残っていることで起こりうる問題

単純にデータベースの内容を移行しただけではElementorの生成したデータが大量に残っていた場合、以下の点が問題になります。

  • 不要なデータがDB容量を圧迫
  • wp_postmeta テーブルのサイズ増大によりクエリ処理速度低下
  • バックアップファイルサイズの増大
  • 処理時間の延長によりサイトの応答速度が悪化(SEOに影響)

また、クラシックエディタに戻したときに、管理画面の「外観→メニュー」でメニューを編集するときに、「投稿」のタイトルがすべて「sp」になってしまう問題も起こりました。

さくらインターネットのレンタルサーバでphpMyAdminで作業する場合

レンタルサーバコントロールパネルにログイン→「Webサイト/データ」→「データベース」

WordPressで使っているデータベースの「全体設定」→「phpMyAdminログイン」をクリック

ユーザー名とパスワード、サーバの選択を入力してログイン。もしユーザー名とパスワードが分からない場合は、Wordpressのルートフォルダにある「wp-config.php」内に書かれています。

WordPressで使っているデータベースをクリック→「「SQL」タブをクリックすると、この画面からSQLを実行することができます。

各SQLの解説

※以下「wp_」となっている所は、Wordpressの環境によってランダムな文字列になっている場合があるので、自分の環境に合わせて変換して(読み替えて)ください。

1行目:postmetaデータの削除

DELETE FROM `wp_postmeta` WHERE `post_id` IN (SELECT `ID` FROM `wp_posts` WHERE `post_type` = 'elementor_library');

目的は「Elementorライブラリの投稿に紐づくメタデータを削除」です。

処理内容としては、wp_postsテーブルからpost_typeがelementor_libraryの投稿IDを取得して、そのIDに紐づくopma_postmetaテーブルのレコードをすべて削除してます。

WordPressでは投稿に関連するカスタムフィールドやメタ情報がpostmetaテーブルに保存されるため、親データを削除する前にこれらを先に削除する必要があります。

2行目:特定メタデータの削除

DELETE FROM `wp_postmeta` WHERE `meta_key` = 'label' AND `meta_value` = 'sp';

目的は「labelがsp(スマートフォン用)のメタデータを削除」です。

Elementorでスマートフォン表示用に設定されたラベルメタデータを削除してます。誤爆するといけないので、いちおうmeta_keyとmeta_valueの両方を指定して特定の条件に合致するデータのみを削除するようにしてます。

3行目:投稿データの削除

DELETE FROM `wp_posts` WHERE `post_type` IN ('elementor_library');

目的は「Elementorライブラリの投稿データ本体を削除」です。

wp_postsテーブルからpost_typeがelementor_libraryのレコードをすべて削除してます。メタデータを先に削除してから本体データを削除しているので、データの整合性が保たれます。

その他、削除する前に状況を確認できるSQL

現在登録されている投稿タイプを確認するSQL

SELECT distinct `post_type` FROM `wp_posts`;

上記のクエリの結果を踏まえて不要な post_type に紐づいている post_meta リストを取得するSQL

SELECT DISTINCT `meta_key` FROM `opma_postmeta` WHERE `post_id` IN (SELECT `ID` FROM `opma_posts` WHERE `post_type` IN ('elementor_library', ...));

※上記「…」の部分に投稿タイプを「’hoge’, ‘huga’」のように列挙。

参考記事

自分用に代表的なpost_typeの一覧を作ったので貼り。

質問・コメントなどあると嬉しいです