【问题标题】:Custom Wordpress REST API JSON自定义 Wordpress REST API JSON
【发布时间】:2021-10-31 20:54:35
【问题描述】:

如何修改新的wp-json REST API 发布数据?

我当前的json结构(/wp-json/myspace/v1/get-by-tag/test0/1):

{
   "items":{
      "posts":[
         {
            "title":"Stay up-to-date with the one latest tech [cloned]"
         }
      ]
   }
}

我只是为了举例而删减数据...

PHP REST API 初始化和后查询:

add_action( 'rest_api_init', function () {
    register_rest_route( 'myspace/v1/', 'get-by-tag/(?P<slug>[a-z0-9]+(?:-[a-z0-9]+)*)/(?P<page>[1-9]{1,2})', array(
        'methods' => WP_REST_Server::READABLE,
        'callback' => 'myspace_get_posts_by_tag',
        'args' => array(
            'slug' => array(
                'required' => true
            ),
            'page' => array(
                'required' => true
            ),                  
        )
    ));
});

function myspace_get_posts_by_tag(WP_REST_Request $request) {

    $slug = $request['slug'];
    $page = $request['page'];

    $term = get_term_by('slug', $slug, 'post_tag');
    $posts_per_page = 1;

    $args = array(
        'tag__in'           => $term->term_id,
        'posts_per_page'    => $posts_per_page,
        'paged'             => $page,
        'orderby'           => 'date',
        'order'             => 'desc',
    );

    $query = new WP_Query( $args ); 

    $max_pages = $query->max_num_pages;
    $total = $query->found_posts;

    $posts = $query->posts;
    $controller = new WP_REST_Posts_Controller('post');

    foreach ( $posts as $post ) {

        //echo $max_pages;
        //echo $page;
        
         $data["items"]["posts"][] = array(
             //extra post content goes here
             "title" => $post->post_title
         );     
        
    }
     
    $response = new WP_REST_Response($data, 200);
    $response->header( 'X-WP-Total', $total ); 
    $response->header( 'X-WP-TotalPages', $max_pages );
    return $response;
}

$max_pages = 总页数
$page = 当前页码

如何将这些值推送到我的数组以实现以下 JSON 结构:

{
   "items":{
      "currentPage":1,
      "pageCount":5,
      "posts":[
               {
                  "title":"Stay up-to-date with the one latest"
               },
               {
                  "title":"Stay up-to-date with the one latest"
               }
      ]
   }
}

【问题讨论】:

    标签: json wordpress wordpress-theming custom-wordpress-pages wordpress-rest-api


    【解决方案1】:
    function my_posts() {
         $posts_list = get_posts( array( 'type' => 'post' ) );
         $post_data = array( "posts" => array());
     
         foreach( $posts_list as $posts) {
             $post_id = $posts->ID;
             $post_title = $posts->post_title;
             $post_data["posts"][] = array(
                 "id" => $post_id,
                 "title" => $post_title
             );
         }
     
         wp_reset_postdata();
         return rest_ensure_response( $post_data );
     }
     
    

    【讨论】:

    • 好的,那么分页呢?我想以这种方式使用带参数的路由:/wp-json/my-route/my-posts?per_page=1&amp;page=1 并在我的 json 中有“currentPage”、“pageCount”
    • @la_petite_kozel 您需要实现大量代码才能获得计数、索引和分页。我建议您阅读本文以了解分页在 WP_Query 中的工作原理。您只需要从您的 GET 请求中获取它并将其传递给 WP_Query。 developer.wordpress.org/reference/classes/wp_query/…
    • 我已经编辑了我的问题,几乎达到了预期的结果,有点卡住了多维数组 =(
    • 想通了,只是将数据添加到第一维:$data["items"] = array( "currentPage" =&gt; $page, "pageCount" =&gt; $max_pages);
    • @la_petite_kozel 太棒了!干得好!
    猜你喜欢
    • 2014-05-06
    • 2017-09-23
    • 2020-09-22
    • 2017-10-29
    • 1970-01-01
    • 2017-05-24
    • 2022-01-05
    • 2016-09-28
    • 2017-04-02
    相关资源
    最近更新 更多