评论
如何在wordpress的rest api中添加文章阅读量接口,适合小程序使用

如何在wordpress的rest api中添加文章阅读量接口,适合小程序使用

我并不气馁,人,多几种生活经验总是可贵的事

如何在wordpress的rest api中添加文章阅读量接口,适合小程序使用

注意:本文是基于星宿UI3.8的基础上学习,针对下版本做的优化学习总结

误区

在3.8的版本星宿UI插件有一个关于文章阅读量的函数钩子。代码中自己注册了一个wordpress中元数据表一个post_views字段。下方还有一个点击文字后更新阅读量。这方式有一个巨大的问题导致小程序阅读量和web端数量不一致(由:陶艾反馈)

如何在wordpress的rest api中添加文章阅读量接口,适合小程序使用

学习

通过以上我们得知访问量是存在元数据表wp_postmeta中views;下载Sakura 主题和Puock主题做过测试切换不同主题后views的值是保持一致

如何在wordpress的rest api中添加文章阅读量接口,适合小程序使用

实践

说明使用view字段是最好的选择,我们的目的是在rest api中添加文章阅读量接口给小程序使用,完全就可以使用wp的钩子;而且小程序上的访问量可以和web端保持一致

<?php

/*

Plugin Name: 星宿UI插件
Plugin URI: https://www.frbkw.com
Description: 为星宿UI提供封面图片API-搜索优化-格式化日期阅读量
Version: 1.4.4
Author: yinfengrui(枫瑞博客网)
Author URI: https://www.frbkw.com
License: A "Slug" license name e.g. GPL2
*/

//rest api返回阅读量
add_filter('rest_prepare_post', 'my_rest_prepare_post', 10, 3);

function my_rest_prepare_post($data, $post, $request)
{
    $_data = $data->data;
    // 添加阅读量字段
    $_data['post_views'] = get_post_meta($post->ID, 'views', true) ?: 0;
    $data->data = $_data;
    return $data;
}

//阅读量增加
function my_react_count_views( $response, $handler, WP_REST_Request $request ) {
    $id = $request->get_param('id');
    $route = $request->get_route();
    if ((stristr($route, 'posts') || stristr($route, 'pages')) && isset($id)) {
        $views = get_post_meta($id, 'views', true);
        if (!$views) {
            add_post_meta($id, 'views', 1);
        } else {
            update_post_meta($id, 'views', intval($views) + 1);
        }
    }
    return $response; 
}

add_filter( 'rest_request_before_callbacks', 'my_react_count_views', 10, 3 );

?>
如何在wordpress的rest api中添加文章阅读量接口,适合小程序使用

最后


还是得多多学习,学无止境