WC_REST_Posts_Controller::delete_item PHP Method

delete_item() public method

Delete a single item.
public delete_item ( WP_REST_Request $request ) : WP_REST_Response | WP_Error
$request WP_REST_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) || $post->post_type !== $this->post_type) {
            return new WP_Error("woocommerce_rest_{$this->post_type}_invalid_id", __('ID is invalid.', '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 (!wc_rest_check_post_permissions($this->post_type, 'delete', $post->ID)) {
            /* translators: %s: post type */
            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) {
                /* translators: %s: post type */
                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) {
                /* translators: %s: post type */
                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) {
            /* translators: %s: post type */
            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;
    }