WP DEVELOP

EP075. “让自定义路由返回真实的 WP_Query 数据”

首页 WordPress 开发课程 REST API 自定义 · EP075
约 6 分钟· #EP075#REST API 自定义
🔒 登录后可标记已读

university/v1/search 路由目前只返回一句测试文字,这一讲让它返回真正的 WordPress 数据。核心认知:REST 回调函数只要 return 一个 PHP 数组(或关联数组),WordPress 会自动把它转成合法 JSON,不需要手写 JSON 语法,也不需要用什么新东西——直接用课程前面一路学的 WP_Query 和 loop 就行。这一讲先对 professor 这个 post type 跑 WP_Query,但不返回整个查询对象自带的原始数据(字段太多,浪费流量),而是在 loop 里用 array_push() 手动组一个只含 titlepermalink 的精简数组再返回。

涉及文件

  • 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->postsWP_Query 对象自带的原始文章数组),会拿到 ID、正文、日期等一大堆用不上的字段,浪费流量。所以改成手动用 array_push() 组一个只含 titlepermalink 的新数组。
  • array_push($array, $value):第一个参数是要追加的目标数组,第二个参数是要加进去的值——这里加的值本身又是一个关联数组(title + permalink),所以最终结构是「数组套数组」。

[截图:浏览器直接访问 wp-json/university/v1/search,查看返回的 professor 列表 JSON(title + permalink 字段)]

Hook / Function 速查

名称类型用途
array_push($array, $value)PHP 内建 function往数组末尾追加一个元素
WP_QueryWP 内建 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