Sort custom endpoint API by number of views


I have registered a rest field in my functions.php for the API to show:

register_rest_field( 'post', 'views', array(
'get_callback' => function ( $data ) {
    return get_post_meta( $data['id'], 'tie_views', true );
}, ));

It is showing the result correctly, now I want a custom endpoint API which I created to sort the result by the number of views from higher to lower from 2 days ago. This is the code:

For the action:

add_action('rest_api_init', function(){

register_rest_route('tft/v1', 'posts/trend/(?P<page>d+)', array(
    'method' => 'GET',
    'callback' => 'tft_trend'


and this is the function:

function tft_trend($page){
$args = [
    'post_type' => 'post',
    'posts_per_page' => 5,
    'nopaging' => false,
    'paged' => $page['page'],
    'order' => 'DESC',
    'orderby' => 'tie_views',
    'meta_key' => 'tie_views',

$posts = get_posts($args);

$data = [];
$j = 0;

foreach($posts as $post){
    $data[$j]['id'] = $post->ID;
    $data[$j]['title'] = $post->post_title;
    $data[$j]['content'] = $post->post_content;
    $data[$j]['views'] = $post->tie_views;
    $data[$j]['featured_image']['large'] = get_the_post_thumbnail_url($post->ID, 'large');
return $data;

The function is also working fine but the issue is that it is only taking the number of views and arranging it from 999 and backwards. I have posts which have thousands of views but it is not fetching those results. I would appreciate any help.

H_alt 4 months 0 Answers 14 views 0

Leave an answer