WC_REST_Product_Custom_Fields_Controller::get_item_names()
Get a collection of custom field names.
Method of the class: WC_REST_Product_Custom_Fields_Controller{}
No Hooks.
Return
WP_Error|WP_REST_Response
.
Usage
$WC_REST_Product_Custom_Fields_Controller = new WC_REST_Product_Custom_Fields_Controller(); $WC_REST_Product_Custom_Fields_Controller->get_item_names( $request );
- $request(WP_REST_Request) (required)
- Full details about the request.
WC_REST_Product_Custom_Fields_Controller::get_item_names() WC REST Product Custom Fields Controller::get item names code WC 9.5.1
public function get_item_names( $request ) { global $wpdb; $search = trim( $request['search'] ); $order = strtoupper( $request['order'] ) === 'DESC' ? 'DESC' : 'ASC'; $page = (int) $request['page']; $limit = (int) $request['per_page']; $offset = ( $page - 1 ) * $limit; $base_query = $wpdb->prepare( "SELECT DISTINCT post_metas.meta_key FROM {$wpdb->postmeta} post_metas LEFT JOIN {$wpdb->posts} posts ON post_metas.post_id = posts.id WHERE posts.post_type = %s AND post_metas.meta_key NOT LIKE %s AND post_metas.meta_key LIKE %s", $this->post_type, $wpdb->esc_like( '_' ) . '%', '%' . $wpdb->esc_like( $search ) . '%' ); // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- $base_query has been prepared already and $order is a static value. $query = $wpdb->prepare( "$base_query ORDER BY post_metas.meta_key $order LIMIT %d, %d", $offset, $limit ); // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- $base_query has been prepared already. $total_query = "SELECT COUNT(1) FROM ($base_query) AS total"; // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared -- $query has been prepared already. $query_result = $wpdb->get_results( $query ); // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared -- $total_query has been prepared already. $total_items = $wpdb->get_var( $total_query ); $custom_field_names = array(); foreach ( $query_result as $custom_field_name ) { $custom_field_names[] = $custom_field_name->meta_key; } $response = rest_ensure_response( $custom_field_names ); $response->header( 'X-WP-Total', (int) $total_items ); $max_pages = ceil( $total_items / $limit ); $response->header( 'X-WP-TotalPages', (int) $max_pages ); $base = add_query_arg( $request->get_query_params(), rest_url( '/' . $this->namespace . '/' . $this->rest_base . '/names' ) ); if ( $page > 1 ) { $prev_page = $page - 1; if ( $prev_page > $max_pages ) { $prev_page = $max_pages; } $prev_link = add_query_arg( 'page', $prev_page, $base ); $response->link_header( 'prev', $prev_link ); } if ( $max_pages > $page ) { $next_page = $page + 1; $next_link = add_query_arg( 'page', $next_page, $base ); $response->link_header( 'next', $next_link ); } return $response; }