前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用 WordPress REST API 给 WordPress 做一个归档页面吧

利用 WordPress REST API 给 WordPress 做一个归档页面吧

作者头像
Tony He
发布2022-11-17 14:46:04
4600
发布2022-11-17 14:46:04
举报
文章被收录于专栏:ouorz.comouorz.com

背景

才发现好像没做博客必须的一个功能——归档,赶快补上吧 🙂

查询了 WordPress REST API 文档之后,发现每次请求的文章总数( 也就是 per_page 参数 )不可以超过 100,但是归档页面理应展示全部文章,于是需要在 function.php 增加以下钩子和函数拓宽这个限制

https://github.com/WP-API/WP-API/issues/2914

代码语言:javascript
复制
add_filter( 'rest_post_collection_params', 'my_prefix_change_post_per_page', 10, 1 );

function my_prefix_change_post_per_page( $params ) {
    if ( isset( $params['per_page'] ) ) {
        $count_posts = wp_count_posts();
        $params['per_page']['maximum'] = $count_posts->publish; //增加限制到当前文章总数
    }
    return $params;
}

代码

WordPress REST API 默认以 date (文章发布日期) 来排序文章输出,所以可以遍历全部文章,判断上下篇发布年份来按照年份归档文章

代码语言:javascript
复制
//获取文章列表
            axios.get('https://www.ouorz.com/wp-json/wp/v2/posts?per_page='+window.post_count) //默认以发布时间排序
             .then(response => {
                 this.posts = response.data
             })
             .then(() => {
                 var k = -1;
                 var i = 0;
                 for(i=0;i<(this.posts).length;i++){ //遍历所有文章
                     if( ((this.posts[i].date.split('T'))[0].split('-'))[0] !== this.last_year ){ //当前文章发布年与上一篇不同
                         this.posts_array[k += 1] = []; //初始化数组
                         this.posts_array[k]['posts'] = []; //初始化 posts 数组
                         this.posts_array[k]['year'] = parseInt(((this.posts[i].date.split('T'))[0].split('-'))[0]); //增加年份
                         this.posts_array[k]['posts'][(this.posts_array[k]['posts']).length] = this.posts[i]; //增加文章
                         this.last_year = ((this.posts[i].date.split('T'))[0].split('-'))[0]; //赋值当前文章发布年份
                     }else{ //发布年份与上一篇相同
                        this.posts_array[k]['posts'][(this.posts_array[k]['posts']).length] = this.posts[i]; //增加文章
                     }
                 }
                 this.loading = false;
            })

↑ JavaScript 代码

效果

https://www.ouorz.com/archive.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 代码
  • 效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档