WordPress通过Ajax更新post_meta关联数组出现admin-ajax.php404错误如何解决
admin-ajax.php返回404错误排查与解决方案
核心问题
你代码中90%的概率是因为ajax路径拼写错误导致的404:在脚本入队的代码中,你传递给admin_url()的参数是admin_ajax.php,而WordPress默认的ajax处理文件名是admin-ajax.php,使用的是中划线而非下划线。
分步排查解决
第一步:修正脚本入队代码的拼写错误
替换你的入队函数为以下代码:function gt21_scripts() { wp_register_script( 'cost-rule', get_template_directory_uri() . '/js/cost-rule.js', array( 'jquery' ) ); wp_enqueue_script( 'cost-rule' ); // 修正文件名拼写,下划线改为中划线 wp_localize_script( 'cost-rule', 'ajax_object', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); }; add_action( 'wp_enqueue_scripts', 'gt21_scripts' );修改后刷新页面测试,绝大多数情况该问题会直接解决。
第二步:验证ajax路径有效性
如果修改后仍报404,打开浏览器控制台输入console.log(ajax_object.ajaxurl),检查输出的地址是否符合你的站点域名/wp-admin/admin-ajax.php的格式,手动访问该地址如果返回-1则路径正常,否则路径有误。第三步:排查自定义配置冲突
- 如果你使用了安全插件修改了默认wp-admin路径、隐藏了后台地址,需要调整代码传入实际的admin-ajax.php路径
- 检查站点根目录的
.htaccess文件,确认伪静态规则没有拦截wp-admin目录下的文件请求,可以临时恢复WordPress默认的.htaccess规则测试。
额外优化建议
你当前使用遍历的索引$i作为删除定位的标识,当你删除某一个元素后,数组的索引会自动重排,后续删除操作会出现删错元素的问题,建议替换为子数组的唯一标识作为定位依据,不要依赖遍历的临时索引。
内容的提问来源于stack exchange,提问作者Eric Brockman
相关产品推荐
相关产品推荐

