NEXT craftinamerica.org. Base setup for headless wordpress https://www.craftinamerica.org
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

class.make-endpoint.php 2.5KB

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