/notes endpoint. * * @author WooThemes * @category API * @package WooCommerce/API * @since 2.6.0 */ if ( ! defined( 'ABSPATH' ) ) { exit; } /** * REST API Order Notes controller class. * * @package WooCommerce/API * @extends WC_REST_ControllerWC_REST_Order_Notes_V1_Controller */ class WC_REST_Order_Notes_Controller extends WC_REST_Order_Notes_V1_Controller { /** * Endpoint namespace. * * @var string */ protected $namespace = 'wc/v2'; /** * Get order notes from an order. * * @param WP_REST_Request $request * @return array */ public function get_items( $request ) { $order = wc_get_order( (int) $request['order_id'] ); if ( empty( $order->get_type() ) || $this->post_type !== $order->get_type() ) { return new WP_Error( "woocommerce_rest_{$this->post_type}_invalid_id", __( 'Invalid order ID.', 'woocommerce' ), array( 'status' => 404 ) ); } $args = array( 'post_id' => $order->get_id(), 'approve' => 'approve', 'type' => 'order_note', ); // Allow filter by order note type. if ( 'customer' === $request['type'] ) { $args['meta_query'] = array( array( 'key' => 'is_customer_note', 'value' => 1, 'compare' => '=', ), ); } elseif ( 'internal' === $request['type'] ) { $args['meta_query'] = array( array( 'key' => 'is_customer_note', 'compare' => 'NOT EXISTS', ), ); } remove_filter( 'comments_clauses', array( 'WC_Comments', 'exclude_order_comments' ), 10, 1 ); $notes = get_comments( $args ); add_filter( 'comments_clauses', array( 'WC_Comments', 'exclude_order_comments' ), 10, 1 ); $data = array(); foreach ( $notes as $note ) { $order_note = $this->prepare_item_for_response( $note, $request ); $order_note = $this->prepare_response_for_collection( $order_note ); $data[] = $order_note; } return rest_ensure_response( $data ); } /** * Get the query params for collections. * * @return array */ public function get_collection_params() { $params = array(); $params['context'] = $this->get_context_param( array( 'default' => 'view' ) ); $params['type'] = array( 'default' => 'any', 'description' => __( 'Limit result to customers or internal notes.', 'woocommerce' ), 'type' => 'string', 'enum' => array( 'any', 'customer', 'internal' ), 'sanitize_callback' => 'sanitize_key', 'validate_callback' => 'rest_validate_request_arg', ); return $params; } }