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

WordPress REST API中register_rest_field未调用回调函数问题排查

排查WordPress REST字段回调未触发的问题

以下是几个常见的排查方向,按优先级尝试:

  • 确认自定义文章类型的REST支持是否正常
    检查comp-tourseite这个自定义文章类型的注册代码,确保show_in_rest参数设置为true。如果该参数被改为false,或者其他插件/主题覆盖了这个设置,REST API不会返回该类型的内容,回调自然不会触发。

  • 检查权限回调是否缺失
    WordPress 5.5+版本对REST权限检查更严格,如果register_rest_field没有设置permission_callback,可能会被默认权限规则拦截。可以临时添加'permission_callback' => '__return_true'到字段配置数组中测试,确认是否是权限问题(正式环境请替换为符合需求的权限判断函数)。

  • 验证字段是否被覆盖
    尝试临时修改字段名(比如把parentpagename改成custom_parentpagename),如果修改后回调能触发,说明原字段名被其他插件或主题的代码覆盖了。

  • 调整钩子执行优先级
    如果你的create_api_posts_meta_field函数在自定义文章类型注册之前就执行了,register_rest_field会找不到对应的文章类型。可以给add_action增加更高的优先级:

    add_action('rest_api_init', 'create_api_posts_meta_field', 20);
    

    (默认优先级是10,数字越大执行越晚,确保在自定义文章类型注册之后运行)

  • 检查回调函数的签名
    确认get_parent_page_for_api的函数签名符合WordPress要求,它需要接收三个参数:

    function get_parent_page_for_api( $value, $object, $field_name ) {
        // 你的业务代码
    }
    

    如果函数签名不符合(比如只定义了一个参数),WordPress更新后可能无法正确调用该回调。

  • 排查缓存问题
    清除WordPress的页面缓存、插件缓存(比如Redis、WP Rocket等),以及CDN缓存。缓存可能会保留旧的REST响应结构,导致新的字段定义不生效。

辅助测试步骤

先确认create_api_posts_meta_field函数是否被执行:

function create_api_posts_meta_field()
{
    error_log('REST字段注册函数已执行'); // 查看服务器日志是否有这条记录
    register_rest_field(
        'comp-tourseite',
        'parentpagename',
        array(
            'get_callback' => 'get_parent_page_for_api',
            'schema' => null,
            'permission_callback' => '__return_true',
        )
    );
}

如果日志中没有这条记录,说明你的代码没有被正确加载(比如文件路径错误、函数被重命名或删除);如果日志存在,再按上面的步骤逐一排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:22:45