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

使用WordPress函数时AJAX请求返回false的问题求助

问题描述

尝试通过AJAX请求调用独立PHP文件内容替换页面元素,PHP文件不含WordPress函数时正常运行;一旦使用get_the_title()这类WP函数,AJAX返回false而非预期内容。

问题原因
  1. 路径错误:你用get_stylesheet_directory_uri()获取的是文件的URL地址,而WP_Filesystem_Direct::get_contents()需要本地服务器文件路径。使用URL会导致文件读取失败,直接返回false。
  2. 未执行PHP代码:get_contents()仅读取文件的文本内容,不会执行其中的PHP代码——就算路径正确,也只会返回<?php echo get_the_title(); ?>这类字符串,而非函数执行后的结果。
  3. 缺少函数上下文:get_the_title()依赖当前文章对象的上下文,AJAX请求默认无此上下文,直接调用会返回空值或触发错误。
解决方案

步骤1:修正文件读取逻辑,执行PHP代码

放弃文件系统读取文本的方式,改用输出缓冲区配合include捕获独立PHP文件的执行输出:

修改functions.php中的example_ajax_request函数:

function example_ajax_request() {
    // 使用本地文件路径而非URL
    $file_path = get_stylesheet_directory() . '/ajax-calls/addition.php';
    
    // 捕获文件执行后的输出内容
    ob_start();
    include $file_path;
    $output = ob_get_clean();
    
    wp_send_json($output);
}

步骤2:为get_the_title()提供上下文

若需获取特定文章标题,需在AJAX请求中传递文章ID,再在PHP中调用函数时传入该ID:

修改JS代码(传递文章ID):

jQuery(document).ready(function($) {
    $( "#button_leadership" ).click(function() {
        // 可根据实际场景动态获取目标文章ID,此处以固定ID为例
        var post_id = 123;
        
        $.ajax({
            url: ajaxurl,
            data: {
                'action':'example_ajax_request',
                'post_id': post_id // 传递文章ID参数
            },
            complete: function(response) {
                $("#ajax-container-team-tiles").html(response.responseJSON);
                console.log(response);
            },
            error: function(errorThrown){
                window.alert(errorThrown);
            }
        });
    });
});

修改addition.php(使用传递的文章ID):

<?php
// 校验并获取传递的文章ID
if(isset($_REQUEST['post_id']) && is_numeric($_REQUEST['post_id'])){
    $post_id = intval($_REQUEST['post_id']);
    echo '<div>' . get_the_title($post_id) . '</div>';
} else {
    echo '<div>无效的文章ID</div>';
}
?>

步骤3:清理冗余代码

删除functions.php中不必要的WP文件系统引入代码:

// 删除以下两行
// require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php';
// require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';
关键说明
  • WordPress的AJAX请求本身运行在WP核心环境中,独立PHP文件无需重新加载WP核心,可直接调用WP函数,但需确保函数拥有正确的上下文(如给get_the_title()传递文章ID)。
  • 输出缓冲区(ob_start()/ob_get_clean())是捕获包含文件执行输出的标准方式,能正确解析并执行文件中的PHP代码。

内容的提问来源于stack exchange,提问作者Cisco Rey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:08:21