Improve posts controller
This commit is contained in:
parent
d67000fb6c
commit
218390071c
|
@ -340,17 +340,6 @@ abstract class WC_REST_Posts_Controller extends WP_REST_Controller {
|
||||||
return rest_ensure_response( $response );
|
return rest_ensure_response( $response );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Update post meta fields.
|
|
||||||
*
|
|
||||||
* @param WP_Post $post
|
|
||||||
* @param WP_REST_Request $request
|
|
||||||
* @return bool|WP_Error
|
|
||||||
*/
|
|
||||||
protected function update_post_meta_fields( $post, $request ) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a collection of posts.
|
* Get a collection of posts.
|
||||||
*
|
*
|
||||||
|
@ -457,6 +446,76 @@ abstract class WC_REST_Posts_Controller extends WP_REST_Controller {
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a single item.
|
||||||
|
*
|
||||||
|
* @param WP_REST_Request $request Full details about the request.
|
||||||
|
* @return WP_REST_Response|WP_Error
|
||||||
|
*/
|
||||||
|
public function delete_item( $request ) {
|
||||||
|
$id = (int) $request['id'];
|
||||||
|
$force = (bool) $request['force'];
|
||||||
|
|
||||||
|
$post = get_post( $id );
|
||||||
|
|
||||||
|
if ( empty( $id ) || empty( $post->ID ) || $this->post_type !== $post->post_type ) {
|
||||||
|
return new WP_Error( "woocommerce_rest_{$this->post_type}_invalid_id", __( 'Invalid post id.', 'woocommerce' ), array( 'status' => 404 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
$supports_trash = EMPTY_TRASH_DAYS > 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter whether an item is trashable.
|
||||||
|
*
|
||||||
|
* Return false to disable trash support for the item.
|
||||||
|
*
|
||||||
|
* @param boolean $supports_trash Whether the item type support trashing.
|
||||||
|
* @param WP_Post $post The Post object being considered for trashing support.
|
||||||
|
*/
|
||||||
|
$supports_trash = apply_filters( "woocommerce_rest_{$this->post_type}_trashable", $supports_trash, $post );
|
||||||
|
|
||||||
|
if ( ! $this->check_delete_permission( $post ) ) {
|
||||||
|
return new WP_Error( "woocommerce_rest_user_cannot_delete_{$this->post_type}", sprintf( __( 'Sorry, you are not allowed to delete %s.', 'woocommerce' ), $this->post_type ), array( 'status' => rest_authorization_required_code() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
$request->set_param( 'context', 'edit' );
|
||||||
|
$response = $this->prepare_item_for_response( $post, $request );
|
||||||
|
|
||||||
|
// If we're forcing, then delete permanently.
|
||||||
|
if ( $force ) {
|
||||||
|
$result = wp_delete_post( $id, true );
|
||||||
|
} else {
|
||||||
|
// If we don't support trashing for this type, error out.
|
||||||
|
if ( ! $supports_trash ) {
|
||||||
|
return new WP_Error( 'woocommerce_rest_trash_not_supported', sprintf( __( 'The %s does not support trashing.', 'woocommerce' ), $this->post_type ), array( 'status' => 501 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, only trash if we haven't already.
|
||||||
|
if ( 'trash' === $post->post_status ) {
|
||||||
|
return new WP_Error( 'woocommerce_rest_already_trashed', sprintf( __( 'The %s has already been deleted.', 'woocommerce' ), $this->post_type ), array( 'status' => 410 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// (Note that internally this falls through to `wp_delete_post` if
|
||||||
|
// the trash is disabled.)
|
||||||
|
$result = wp_trash_post( $id );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! $result ) {
|
||||||
|
return new WP_Error( 'woocommerce_rest_cannot_delete', sprintf( __( 'The %s cannot be deleted.', 'woocommerce' ), $this->post_type ), array( 'status' => 500 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fires after a single item is deleted or trashed via the REST API.
|
||||||
|
*
|
||||||
|
* @param object $post The deleted or trashed item.
|
||||||
|
* @param WP_REST_Response $response The response data.
|
||||||
|
* @param WP_REST_Request $request The request sent to the API.
|
||||||
|
*/
|
||||||
|
do_action( "woocommerce_rest_delete_{$this->post_type}", $post, $response, $request );
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine the allowed query_vars for a get_items() response and
|
* Determine the allowed query_vars for a get_items() response and
|
||||||
* prepare for WP_Query.
|
* prepare for WP_Query.
|
||||||
|
@ -650,72 +709,13 @@ abstract class WC_REST_Posts_Controller extends WP_REST_Controller {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete a single item.
|
* Update post meta fields.
|
||||||
*
|
*
|
||||||
* @param WP_REST_Request $request Full details about the request.
|
* @param WP_Post $post
|
||||||
* @return WP_REST_Response|WP_Error
|
* @param WP_REST_Request $request
|
||||||
|
* @return bool|WP_Error
|
||||||
*/
|
*/
|
||||||
public function delete_item( $request ) {
|
protected function update_post_meta_fields( $post, $request ) {
|
||||||
$id = (int) $request['id'];
|
return true;
|
||||||
$force = (bool) $request['force'];
|
|
||||||
|
|
||||||
$post = get_post( $id );
|
|
||||||
|
|
||||||
if ( empty( $id ) || empty( $post->ID ) || $this->post_type !== $post->post_type ) {
|
|
||||||
return new WP_Error( "woocommerce_rest_{$this->post_type}_invalid_id", __( 'Invalid post id.', 'woocommerce' ), array( 'status' => 404 ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
$supports_trash = EMPTY_TRASH_DAYS > 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filter whether an item is trashable.
|
|
||||||
*
|
|
||||||
* Return false to disable trash support for the item.
|
|
||||||
*
|
|
||||||
* @param boolean $supports_trash Whether the item type support trashing.
|
|
||||||
* @param WP_Post $post The Post object being considered for trashing support.
|
|
||||||
*/
|
|
||||||
$supports_trash = apply_filters( "woocommerce_rest_{$this->post_type}_trashable", $supports_trash, $post );
|
|
||||||
|
|
||||||
if ( ! $this->check_delete_permission( $post ) ) {
|
|
||||||
return new WP_Error( "woocommerce_rest_user_cannot_delete_{$this->post_type}", sprintf( __( 'Sorry, you are not allowed to delete %s.', 'woocommerce' ), $this->post_type ), array( 'status' => rest_authorization_required_code() ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
$request->set_param( 'context', 'edit' );
|
|
||||||
$response = $this->prepare_item_for_response( $post, $request );
|
|
||||||
|
|
||||||
// If we're forcing, then delete permanently.
|
|
||||||
if ( $force ) {
|
|
||||||
$result = wp_delete_post( $id, true );
|
|
||||||
} else {
|
|
||||||
// If we don't support trashing for this type, error out.
|
|
||||||
if ( ! $supports_trash ) {
|
|
||||||
return new WP_Error( 'woocommerce_rest_trash_not_supported', sprintf( __( 'The %s does not support trashing.', 'woocommerce' ), $this->post_type ), array( 'status' => 501 ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Otherwise, only trash if we haven't already.
|
|
||||||
if ( 'trash' === $post->post_status ) {
|
|
||||||
return new WP_Error( 'woocommerce_rest_already_trashed', sprintf( __( 'The %s has already been deleted.', 'woocommerce' ), $this->post_type ), array( 'status' => 410 ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
// (Note that internally this falls through to `wp_delete_post` if
|
|
||||||
// the trash is disabled.)
|
|
||||||
$result = wp_trash_post( $id );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! $result ) {
|
|
||||||
return new WP_Error( 'woocommerce_rest_cannot_delete', sprintf( __( 'The %s cannot be deleted.', 'woocommerce' ), $this->post_type ), array( 'status' => 500 ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fires after a single item is deleted or trashed via the REST API.
|
|
||||||
*
|
|
||||||
* @param object $post The deleted or trashed item.
|
|
||||||
* @param WP_REST_Response $response The response data.
|
|
||||||
* @param WP_REST_Request $request The request sent to the API.
|
|
||||||
*/
|
|
||||||
do_action( "woocommerce_rest_delete_{$this->post_type}", $post, $response, $request );
|
|
||||||
|
|
||||||
return $response;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue