\d+)", method="GET") */ public function get(Request $request) { $post = Post::query()->find($request->param('id')); if (!$post) { throw new ControllerException([ [ 'message' => 'Post not found' ] ], 404); } $post['edit_link'] = get_edit_post_link($post['ID'], 'none'); return new WP_REST_Response($post); } /** * @Route(path="/admin/posts/(?P\d+)", method="POST") */ public function update(Request $request) { $post = array_merge($request->except(['id', 'terms']), [ 'ID' => $request->param('id') ]); $updated = wp_update_post($post); if (!$updated) { throw new ControllerException([ [ 'message' => 'Failed to update post' ] ], 500); } $post = get_post($updated)->to_array(); if ($request->has('terms')) { $post['terms'] = $this->setTerms($updated, $request->param('terms')); } $post['edit_link'] = get_edit_post_link($updated, 'none'); return new WP_REST_Response($post); } /** * @Route(path="/admin/posts", method="POST") */ public function create(Request $request) { $post = $request->except(['terms']); $created = wp_insert_post($post); if (!$created) { throw new ControllerException([ [ 'message' => 'Failed to create post' ] ], 500); } $post = get_post($created)->to_array(); if ($request->has('terms')) { $post['terms'] = $this->setTerms($created, $request->param('terms')); } $post['edit_link'] = get_edit_post_link($post['ID'], 'none'); return new WP_REST_Response($post); } private function setTerms($post, $terms) { $taxonomies = array_unique(array_column($terms, 'taxonomy')); foreach ($taxonomies as $taxonomy) { wp_set_object_terms($post, [], $taxonomy); } foreach ($terms as $term) { wp_set_post_terms($post, $term['name'], $term['taxonomy'], true); } return wp_get_post_terms($post, $taxonomies, ['fields' => 'all']); } }