You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:20:45