WordPress中PHP文件草稿页可用,发布后无法访问的问题求助
解决WordPress中JS无法找到PHP文件的问题
核心原因是相对路径解析错误:草稿模式页面URL是参数式(如?p=123),相对路径getcollection.php会指向网站根目录;但发布后页面用友好链接(如/post-name/),相对路径会被解析为/post-name/getcollection.php,这个路径不存在,所以请求失败。
下面是具体解决方案,按推荐优先级排序:
1. 规范做法:使用WordPress自定义REST端点(推荐)
不需要单独存放PHP文件,直接把逻辑整合到WordPress体系中,更安全且不易受更新影响:
- 在主题的
functions.php中添加以下代码,注册自定义API端点:// 处理数据的回调函数,替换成你原getcollection.php里的逻辑 function custom_get_collection() { // 示例:返回测试数据,这里写你的业务逻辑 $response = array( 'status' => 'success', 'data' => '你的集合数据' ); return rest_ensure_response($response); } // 注册REST路由 add_action('rest_api_init', function() { register_rest_route( 'custom/v1', // 命名空间,可自定义 '/collection/', // 路由路径,可自定义 array( 'methods' => 'GET', 'callback' => 'custom_get_collection', // 权限控制:如果需要登录才能访问,替换为'is_user_logged_in' 'permission_callback' => '__return_true' ) ); }); - 在JavaScript中调用这个端点,使用绝对路径:
// 如果JS写在PHP模板里,直接用site_url生成绝对路径 xhttp.open("GET", "<?php echo esc_url(site_url('/wp-json/custom/v1/collection')); ?>"); // 如果是独立JS文件,先在主题functions.php中注入根路径变量 // (先在functions.php加:echo '<script>const siteRoot = "' . esc_url(site_url()) . '";</script>'; 挂在wp_head钩子) // 然后JS里写:xhttp.open("GET", siteRoot + "/wp-json/custom/v1/collection");
2. 使用绝对路径指向根目录的独立PHP文件
如果坚持使用单独的getcollection.php文件:
- 将文件放在网站根目录(和
wp-config.php、wp-content同级) - 在JavaScript中必须使用绝对路径,避免相对路径解析错误:
// 方式1:直接写完整域名(不推荐,换域名要修改) xhttp.open("GET", "https://你的域名.com/getcollection.php"); // 方式2:用WordPress函数生成根路径(推荐,写在PHP模板里) xhttp.open("GET", "<?php echo esc_url(site_url('/getcollection.php')); ?>"); // 方式3:独立JS文件中使用全局变量(先在functions.php注入siteRoot变量) xhttp.open("GET", siteRoot + "/getcollection.php"); - 若遇到WordPress的.htaccess拦截请求,在
# BEGIN WordPress前添加规则允许访问该文件:<Files "getcollection.php"> Require all granted </Files>
3. 避免的错误做法
- 不要将PHP文件放在主题目录后用相对路径调用,因为主题目录路径复杂,相对路径容易出错;
- 不要直接在JS里用
../getcollection.php这类相对路径,多级页面下解析结果会混乱; - 不要随意修改WordPress核心文件或默认.htaccess规则,容易导致网站崩溃。
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

