2026年5月21日

2026年5月21日

Elementorのエラーを解決する方法

はじめに

Elementorの「データを保存できませんでした」エラー・エディターが白くなる・フロントエンドのレイアウトが崩れる問題は、PHPメモリ不足・プラグイン競合・ElementorのCSS/キャッシュが古くなっていることが原因です。

症状・原因

  • 「データを保存できませんでした」ダイアログが出る
  • Elementorエディターが白い画面・ロードが終わらない
  • フロントエンドでElementorのCSSが読み込まれずデザインが崩れる
  • 特定のウィジェットだけ表示されない

解決手順

ステップ1:エラーの詳細を確認する

# WordPressのデバッグログを有効化
wp config set WP_DEBUG true --raw --type=constant
wp config set WP_DEBUG_LOG true --raw --type=constant
wp config set WP_DEBUG_DISPLAY false --raw --type=constant

# ログを確認
tail -50 wp-content/debug.log | grep -i elementor

# PHPメモリ上限を確認
wp eval "echo WP_MEMORY_LIMIT . ' / ' . WP_MAX_MEMORY_LIMIT;"

# Elementorのシステム情報を確認
wp eval "
if (class_exists('\Elementor\Core\Debug\Debug')) {
    echo 'Elementor version: ' . ELEMENTOR_VERSION . PHP_EOL;
}
echo 'Memory limit: ' . ini_get('memory_limit') . PHP_EOL;
echo 'Max execution time: ' . ini_get('max_execution_time') . PHP_EOL;
"

ステップ2:メモリとPHP設定を修正する

// wp-config.php: Elementorに必要なメモリを確保
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
# .htaccess: PHP設定を上書き
php_value memory_limit 256M
php_value max_execution_time 300
php_value upload_max_filesize 64M
php_value post_max_size 64M
# Elementorのキャッシュを削除
wp eval "
if (class_exists('\Elementor\Plugin')) {
    \Elementor\Plugin::instance()->files_manager->clear_cache();
    echo 'Elementor cache cleared';
}
"

# Elementorのデータを再生成
wp elementor flush-css  # Elementor CLI がある場合

# WP-CLI でElementorのCSS再生成
wp eval "
global \$wpdb;
// Elementorのポストメタからキャッシュをクリア
\$wpdb->query(\"DELETE FROM {$wpdb->postmeta} WHERE meta_key = '_elementor_css'\");
echo 'Elementor CSS cache deleted from DB';
"

ステップ3:Elementorのデータ保存エラーを修正する

// functions.php: Elementorの保存エラー対策

// ① REST API を使った保存が失敗する場合
add_filter('elementor/document/save/data', function(array $data, \Elementor\Core\Base\Document $document): array {
    // 保存データのサイズを確認
    $size = strlen(json_encode($data));
    if ($size > 5 * 1024 * 1024) { // 5MB超
        error_log(sprintf('[Elementor] Large save data: %dMB for post %d',
            $size / 1024 / 1024, $document->get_id()));
    }
    return $data;
}, 10, 2);

// ② nonceの有効時間を延長(長時間編集でタイムアウトする場合)
add_filter('nonce_life', function(int $life): int {
    if (isset($_REQUEST['action']) && str_starts_with($_REQUEST['action'], 'elementor')) {
        return DAY_IN_SECONDS; // 24時間
    }
    return $life;
});

// ③ Elementor の保存前後にログ
add_action('elementor/document/before_save', function(\Elementor\Core\Base\Document $document): void {
    error_log('[Elementor] Saving post: ' . $document->get_id());
});

add_action('elementor/document/after_save', function(\Elementor\Core\Base\Document $document): void {
    error_log('[Elementor] Saved post: ' . $document->get_id());
});

ステップ4:フロントエンドのCSSが壊れる問題を修正する

# Elementor CSS を再生成
wp eval "
\$posts = get_posts([
    'post_type'   => 'any',
    'meta_key'    => '_elementor_edit_mode',
    'meta_value'  => 'builder',
    'numberposts' => -1,
    'fields'      => 'ids',
]);
foreach (\$posts as \$post_id) {
    delete_post_meta(\$post_id, '_elementor_css');
}
echo count(\$posts) . '件のElementor CSSキャッシュを削除しました';
"

# Elementorのアセットを再生成
wp eval "
if (class_exists('\Elementor\Plugin')) {
    \Elementor\Plugin::instance()->files_manager->clear_cache();
}
"
// functions.php: Elementor CSS の出力モードを変更
add_filter('elementor/frontend/print_google_fonts', '__return_false'); // Google Fonts を無効化

// 外部CSS読み込みを最適化
add_action('elementor/frontend/after_register_styles', function(): void {
    // Elementor の不要なアイコンフォントを削除
    wp_deregister_style('elementor-icons');
    wp_deregister_style('elementor-icons-fa-solid');
});

// Elementor のインラインCSSを有効化(外部ファイル生成の問題を回避)
add_filter('elementor/frontend/builder_content_data', function(array $data, int $post_id): array {
    return $data;
}, 10, 2);

ステップ5:プラグイン競合を切り分ける

# Elementor以外のプラグインを全て無効化してテスト
wp plugin list --status=active --fields=name | grep -v elementor | while read plugin; do
    wp plugin deactivate "$plugin" 2>/dev/null
done

# Elementorの動作をテスト後、プラグインを1つずつ有効化
wp plugin activate contact-form-7
# テスト → 問題があれば contact-form-7 が原因

# Elementorのセーフモードを有効化(管理画面から)
# Elementor → ツール → 一般 → セーフモード を有効

# Elementorのデータを修復
wp eval "
if (class_exists('\Elementor\Plugin')) {
    // Elementorのデータベーステーブルを確認
    \Elementor\Plugin::instance()->uploads_manager->get_temp_dir();
}
"
// functions.php: Elementorと他プラグインの競合を防ぐ

// jQuery競合を防ぐ
add_action('elementor/frontend/before_enqueue_scripts', function(): void {
    // jQueryをフッターに移動する処理を無効化(Elementorはヘッダーに必要)
    remove_action('wp_enqueue_scripts', 'move_jquery_to_footer', 99);
});

// 他のページビルダーとの競合を防ぐ
add_filter('elementor/editor/localize_settings', function(array $settings): array {
    $settings['i18n']['confirm_delete'] = '本当に削除しますか?';
    return $settings;
});

注意事項

  • Elementorのエディターは最低256MBのPHPメモリが必要です。共有ホスティングでメモリ制限が低い場合は、ホスティング会社にメモリ上限の引き上げを依頼してください
  • Elementorのキャッシュを削除するとページが一時的に遅くなります(次回アクセス時にCSSが再生成されるため)。アクセスの少ない時間帯に行ってください
  • Elementor Proを使用している場合、Elementor(無料版)とElementor Proのバージョンが一致していないとエラーになることがあります。両方を最新版に更新してください

まとめ

Elementorエラーの解決は①WP_DEBUG_LOGでエラー詳細を確認してPHPメモリ・タイムアウトを特定、②WP_MEMORY_LIMIT='256M'.htaccessでPHP設定を引き上げ、③_elementor_cssメタを削除してfiles_manager->clear_cache()でCSS再生成、④nonce_lifeフィルターで長時間編集時のタイムアウトを延長、⑤wp plugin deactivateで競合プラグインを切り分けセーフモードで動作を確認します。

お気軽にご相談ください

お見積りへ お問い合わせへ