NEXT craftinamerica.org. Base setup for headless wordpress https://www.craftinamerica.org
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

class.make-endpoint.php 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. include('reformat-blocks.php');
  3. class Make_Endpoint_For extends WP_REST_Controller {
  4. private $post_type;
  5. function __construct($post_type) {
  6. $this->post_type = $post_type;
  7. }
  8. /**
  9. * Register the routes for the objects of the controller.
  10. */
  11. public function register_custom_route($route) {
  12. $version = '2';
  13. $namespace = 'craft/v' . $version;
  14. register_rest_route( $namespace, '/' . $route, [
  15. array(
  16. 'methods' => WP_REST_Server::READABLE,
  17. 'callback' => array( $this, 'get_items' )
  18. ),
  19. ]);
  20. register_rest_route( $namespace, '/' . $route . '/(?P<id>[\d]+)', [
  21. array(
  22. 'methods' => WP_REST_Server::READABLE,
  23. 'callback' => array( $this, 'get_items' )
  24. ),
  25. ]);
  26. }
  27. public function get_items( $request ) {
  28. // Get parameters from request
  29. // /<id>?limit=<num>
  30. $params = $request->get_params();
  31. $args = array( 'numberposts' => -1, 'post_type' => $this->post_type );
  32. if(intval($params['limit']) > 0) { $args['numberposts'] = intval($params['limit']); }
  33. if(intval($params['id']) > 0) { $args['include'] = array($params['id']); }
  34. // !: Add order asc/desc
  35. // !: Add orderby
  36. $collection = array();
  37. foreach( get_posts($args) as $item ) {
  38. // Get those Block!
  39. $item->blocks = parse_blocks( $item->post_content );
  40. $data = $this->prepare_item_for_response( $item, $request );
  41. $collection[$item->ID] = $this->prepare_response_for_collection( $data );
  42. }
  43. wp_reset_postdata();
  44. return new WP_REST_Response( $collection, 200 );
  45. }
  46. public function prepare_item_for_response( $item, $request ) {
  47. $filtered = array();
  48. $filtered[id] = $item->ID;
  49. $filtered[slug] = $item->post_name;
  50. $filtered[type] = $item->post_type;
  51. $filtered[title] = $item->post_title;
  52. $filtered[excerpt] = $item->post_excerpt;
  53. $filtered[date] = $item->post_date;
  54. $filtered[content] = $item->post_content;
  55. $filtered[blocks] = get_rearrange_blocks($item->blocks);
  56. return $filtered;
  57. // return $item;
  58. }
  59. }
  60. ?>