5ucms论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 11792|回复: 2
打印 上一主题 下一主题

[教程] WordPress REST API 根据自定义字段排序

[复制链接]

670

主题

785

帖子

8273

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8273
跳转到指定楼层
楼主
发表于 2021-5-17 12:04:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
https://www.wpzhiku.com/wordpress-rest-api-gen-ju-zi/


在主题的function.php里加

为文章添加按自定义字段排序方式
如果我们需要让文章按自定义字段方式进行排序,方法是类似的。下面的代码为 WP REST API 添加了 views、area、random 排序方式。

  1. add_filter('rest_post_collection_params', function($params)
  2. {
  3.     $params[ 'orderby' ][ 'enum' ][] = 'views';
  4.     $params[ 'orderby' ][ 'enum' ][] = 'area';
  5.     $params[ 'orderby' ][ 'enum' ][] = 'random';

  6.     return $params;
  7. }, 10, 1);
复制代码

只添加了排序方法还没用,我们还需要把按这些自定义参数排序的逻辑添加到 REST API 查询中,代码如下,从代码中可以看出,修改 REST API 查询的方法和自定义WP_Query的方法类似。

  1. add_filter('rest_post_query', function ($query_vars, $request)
  2. {
  3.     $orderby = $request->get_param('orderby');

  4.     if (isset($orderby) && $orderby === 'views') {
  5.         $query_vars[ "orderby" ]  = "meta_value_num";
  6.         $query_vars[ "meta_key" ] = "wl_pageviews";
  7.     }

  8.     if (isset($orderby) && $orderby === 'area') {
  9.         $query_vars[ "orderby" ]  = "meta_value_num";
  10.         $query_vars[ "meta_key" ] = "area";
  11.     }

  12.     if (isset($orderby) && $orderby === 'random') {
  13.         $query_vars[ "orderby" ] = "random";
  14.     }

  15.     return $query_vars;
  16. }, 10, 2);
复制代码

排序是程序开发中必不可少的逻辑之一,WorPress REST API 默认为我们提供了几个基础的排序方式,很多情况下都不够用,好在我们可以通过本文中的方法添加自己需要的逻辑进行排序,来帮助用户更方便的查找过滤数据。
回复

使用道具 举报

670

主题

785

帖子

8273

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8273
沙发
 楼主| 发表于 2021-5-17 12:05:19 | 只看该作者
如果你加的字段像我一样是rank字段,后台自己填数字的
那就把上边的三个  留下一个,比如 留area
然后把area部分的 area meta_value_num area 都改为 rank
然后注意 自定义的rank值,需要每篇文章里都填!不能为空,否则在一些API输出中不显示,比如含search的输出
默认是从大到小排序


用法:
  1. /wp-json/wp/v2/posts?per_page=12&page=1&search=123&orderby=rank
复制代码
回复 支持 反对

使用道具 举报

670

主题

785

帖子

8273

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8273
板凳
 楼主| 发表于 2021-6-11 09:02:31 | 只看该作者
注意 这种排序方法的数值范围 经测试只支持 -999~999 范围,超出会变成排在最后,原因未知
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|5ucms.com

GMT+8, 2024-6-16 11:00 , Processed in 0.046875 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表