EP075. “让自定义路由返回真实的 WP_Query 数据”
🔒 登录后可标记已读university/v1/search 路由目前只返回一句测试文字,这一讲让它返回真正的 WordPress 数据。核心认知:REST 回调函数只要 return 一个 PHP 数组(或关联数组),WordPress 会自动把它转成合法 JSON,不需要手写 JSON 语法,也不需要用什么新东西——直接用课程前面一路学的 WP_Query 和 loop 就行。这一讲先对 professor 这个 post type 跑 WP_Query,但不返回整个查询对象自带的原始数据(字段太多,浪费流量),而是在 loop 里用 array_push() 手动组一个只含 title 和 permalink 的精简数组再返回。
涉及文件
wp-content/themes/fictional-university-theme/inc/search-route.php(修改,只改universitySearchResults()函数体)
代码实现
universitySearchResults() 函数体从「返回测试文字」改成「查 professor 并组装精简数组」:
// wp-content/themes/fictional-university-theme/inc/search-route.php
function universitySearchResults() {
// 新增:查 professor post type
$professors = new WP_Query(array(
'post_type' => 'professor'
));
// 新增:只放需要的字段,不把 WP_Query 原始数据整个吐出去
$professorResults = array();
while($professors->have_posts()) {
$professors->the_post();
array_push($professorResults, array(
'title' => get_the_title(),
'permalink' => get_the_permalink()
));
}
return $professorResults;
}
要点:
return array(...)/return $professorResults这类 PHP 数据结构,WordPress 会自动转成合法 JSON——这也是为什么可以直接沿用之前学的 PHP 写法,不用管 JSON 语法本身。- 如果直接
return $professors->posts(WP_Query对象自带的原始文章数组),会拿到 ID、正文、日期等一大堆用不上的字段,浪费流量。所以改成手动用array_push()组一个只含title、permalink的新数组。 array_push($array, $value):第一个参数是要追加的目标数组,第二个参数是要加进去的值——这里加的值本身又是一个关联数组(title+permalink),所以最终结构是「数组套数组」。
[截图:浏览器直接访问 wp-json/university/v1/search,查看返回的 professor 列表 JSON(title + permalink 字段)]
Hook / Function 速查
| 名称 | 类型 | 用途 |
|---|---|---|
array_push($array, $value) | PHP 内建 function | 往数组末尾追加一个元素 |
WP_Query | WP 内建 class | 这一讲用来查 professor post type,跟 Section 6 用法完全一样 |
常见坑
- transcript 里提到,直接返回
$professors->posts会把 WordPress 自带的一大堆字段(ID、作者、正文……)都吐给前端,这一讲特意演示了「不要这样做」,改成手动组装精简数组。
延伸 / 后续讲座会用到
下一讲(EP076)给这个路由加搜索关键词参数($data['term']),这样才能真正按关键词搜 professor,而不是每次都返回全部 professor。
Sources
Udemy:
- Become a WordPress Developer: Unlocking Power With Code — Section 15, EP075