WordPress 的 admin-ajax.php 返回 500 错误(Elementor update时出现 Server Error (500 error))

当 Elementor 编辑页面后update时出现 Server Error (500 error)错误,在日志中显示WordPress 的 admin-ajax.php 返回 500 错误(如日志中的 "POST /wp-admin/admin-ajax.php HTTP/2.0 500 184"),通常与插件/主题的 AJAX 请求冲突、PHP 配置或资源限制有关。以下是针对性解决方案:


1. 获取详细错误信息

启用 WordPress 调试模式

在 wp-config.php 中添加以下代码,定位具体错误:

php
复制
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);    // 错误日志保存到 /wp-content/debug.log
define('WP_DEBUG_DISPLAY', false); // 不直接显示错误到前端
  • 操作后:复现错误(如触发 Elementor 操作),检查 /wp-content/debug.log 中的具体错误(如内存不足、语法错误等)。

2. 检查 AJAX 请求来源

确定触发 AJAX 的插件/功能

  • 在浏览器开发者工具(F12)的 Network 选项卡中:
    1. 1.找到失败的 admin-ajax.php 请求。
    2. 2.查看 Headers 或 Payload 中的 action 参数(如 action=elementor_ajax_action)。
    3. 3.根据 action 名称定位到具体插件或主题功能。

3. 解决常见原因

可能性 1:插件/主题冲突

  • 操作
    1. 1.停用所有插件:通过 FTP 重命名 /wp-content/plugins 为 plugins_old
    2. 2.切换默认主题:重命名当前主题文件夹(如 /themes/your-theme → your-theme_old)。
    3. 3.重新访问页面,若错误消失,逐步恢复插件/主题,找到冲突源。

可能性 2:PHP 内存不足

  • 错误示例Allowed memory size exhausted
  • 修复
    • 在 wp-config.php 中增加内存:
      php
      复制
      define('WP_MEMORY_LIMIT', '512M');
      
    • 或在 php.ini 中设置:
      ini
      复制
      memory_limit = 512M(作者推荐这个方法)
      

可能性 3:PHP 超时

  • 错误示例Maximum execution time exceeded
  • 修复
    • 在 php.ini 中调整:
      ini
      复制
      max_execution_time = 300
      max_input_time = 300
      

可能性 4:代码语法错误

  • 错误示例PHP Parse error: syntax error in...
  • 操作
    • 根据 debug.log 提示的文件和行号,检查插件/主题代码。
    • 若为第三方插件,尝试重新安装或联系开发者。

4. 检查服务器配置

安全模块拦截(如 ModSecurity)

  • 现象:错误日志中出现 ModSecurity: Access denied
  • 解决
    1. 1.联系主机提供商,提供触发错误的 AJAX 请求详情,请求临时禁用 ModSecurity 或调整规则。
    2. 2.或自行在 .htaccess 中添加(不推荐长期使用):
      apache
      复制
      <IfModule mod_security2.c>
        SecRuleEngine Off
      </IfModule>
      

5. 修复文件权限

  • 目标:确保 WordPress 核心文件可读写。
  • 命令(通过 SSH):
    bash
    复制
    cd /path/to/wordpress
    find . -type d -exec chmod 755 {} \;  # 目录权限 755
    find . -type f -exec chmod 644 {} \;  # 文件权限 644
    chmod 600 wp-config.php               # 保护配置文件
    

6. 手动重装 WordPress 核心文件

  • 适用场景:怀疑 admin-ajax.php 文件损坏。
  • 步骤
    1. 1.从 WordPress 官网 下载最新版本。
    2. 2.删除服务器上的 /wp-admin 和 /wp-includes 目录。
    3. 3.上传新版本中的对应目录。

7. 数据库修复

  • 操作
    1. 1.在 wp-config.php 中添加:
      php
      复制
      define('WP_ALLOW_REPAIR', true);
      
    2. 2.访问 https://your-site.com/wp-admin/maint/repair.php,执行数据库修复。

8. 回退 Elementor 版本

  • 使用 WP Rollback 插件降级到稳定版本。

总结步骤

  1. 1.启用调试模式 → 获取具体错误信息。
  2. 2.检查 AJAX 请求来源 → 定位冲突插件/主题。
  3. 3.按优先级修复:内存/超时 → 代码错误 → 文件权限 → 服务器配置。
  4. 4.重装核心文件或回退插件

若问题仍未解决,提供以下信息寻求进一步帮助:

  • debug.log 内容
  • PHP 版本、Elementor 版本
  • 主机环境(如 Apache/Nginx、MySQL 版本)