如何通过WordPress REST API的wp/v2/posts/{post_id}获取文章点赞数?
解决方案:通过WordPress REST API获取文章点赞数
默认情况下,WordPress原生REST API和Jetpack插件都不会将点赞数包含在wp-json/wp/v2/posts/{post_id}的响应中,你可以通过以下两种方式实现需求:
方式一:自定义点赞功能并暴露到REST API
如果不想依赖第三方插件,完全自定义实现点赞计数并开放API:
注册REST字段,将点赞数添加到文章响应
将以下代码添加到主题的functions.php文件或自定义插件中:function add_post_likes_to_rest_api() { register_rest_field( 'post', 'likes_count', array( 'get_callback' => 'get_post_likes_count', 'update_callback' => null, 'schema' => null, ) ); } add_action( 'rest_api_init', 'add_post_likes_to_rest_api' ); function get_post_likes_count( $object ) { $post_id = $object['id']; // 获取存储的点赞数,默认返回0 return get_post_meta( $post_id, 'post_likes_count', true ) ?: 0; }可选:添加点赞接口(用于增加点赞数)
如果需要通过API触发点赞操作,再添加以下代码:function register_like_post_endpoint() { register_rest_route( 'custom/v1', '/post/(?P<id>\d+)/like', array( 'methods' => 'POST', 'callback' => 'handle_like_post', 'permission_callback' => function() { // 可根据需求修改权限,比如仅允许登录用户:return is_user_logged_in(); return true; }, ) ); } add_action( 'rest_api_init', 'register_like_post_endpoint' ); function handle_like_post( $request ) { $post_id = $request['id']; if ( !get_post( $post_id ) ) { return new WP_Error( 'invalid_post', '文章不存在', array( 'status' => 404 ) ); } $current_likes = get_post_meta( $post_id, 'post_likes_count', true ) ?: 0; update_post_meta( $post_id, 'post_likes_count', $current_likes + 1 ); return array( 'likes_count' => $current_likes + 1 ); }
完成后,访问wp-json/wp/v2/posts/{post_id}即可在响应中看到likes_count字段。
方式二:适配Jetpack插件,将其点赞数暴露到REST API
如果你已经在使用Jetpack的点赞功能,可以直接读取它存储的点赞数据并添加到API响应:
将以下代码添加到functions.php或自定义插件:
function add_jetpack_likes_to_rest_api() { register_rest_field( 'post', 'jetpack_likes_count', array( 'get_callback' => 'get_jetpack_likes_count', 'schema' => null, ) ); } add_action( 'rest_api_init', 'add_jetpack_likes_to_rest_api' ); function get_jetpack_likes_count( $object ) { $post_id = $object['id']; // 读取Jetpack存储的点赞数据 $likes_data = get_post_meta( $post_id, '_jetpack_likes', true ); // 返回点赞计数,默认0 return isset( $likes_data['count'] ) ? $likes_data['count'] : 0; }
之后访问wp-json/wp/v2/posts/{post_id}就能获取到jetpack_likes_count字段,对应Jetpack的点赞次数。
注意事项
- 代码修改后建议清空缓存,确保REST API响应更新
- 如果需要防止重复点赞,可以在点赞接口中添加逻辑(比如通过用户ID或Cookie记录已点赞状态)
- 自定义代码优先放在自定义插件中,避免主题更新时丢失修改
内容的提问来源于stack exchange,提问作者Sumit Chatterjee
相关产品推荐
相关产品推荐

