WP_REST_Pattern_Directory_Controller::get_items() WordPress Method
The WP_REST_Pattern_Directory_Controller::get_items() method is used to retrieve a list of patterns from the WordPress database. The methods accepts two parameters: the first is the number of patterns to retrieve, and the second is an array of arguments used to filter the patterns.
WP_REST_Pattern_Directory_Controller::get_items( WP_REST_Request $request ) #
Search and retrieve block patterns metadata
Parameters
- $request
(WP_REST_Request)(Required)Full details about the request.
Return
(WP_REST_Response|WP_Error) Response object on success, or WP_Error object on failure.
Source
File: wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php
public function get_items( $request ) { /* * Include an unmodified `$wp_version`, so the API can craft a response that's tailored to * it. Some plugins modify the version in a misguided attempt to improve security by * obscuring the version, which can cause invalid requests. */ require ABSPATH . WPINC . '/version.php'; $query_args = array( 'locale' => get_user_locale(), 'wp-version' => $wp_version, ); $category_id = $request['category']; $keyword_id = $request['keyword']; $search_term = $request['search']; $slug = $request['slug']; if ( $category_id ) { $query_args['pattern-categories'] = $category_id; } if ( $keyword_id ) { $query_args['pattern-keywords'] = $keyword_id; } if ( $search_term ) { $query_args['search'] = $search_term; } if ( $slug ) { $query_args['slug'] = $slug; } $transient_key = $this->get_transient_key( $query_args ); /* * Use network-wide transient to improve performance. The locale is the only site * configuration that affects the response, and it's included in the transient key. */ $raw_patterns = get_site_transient( $transient_key ); if ( ! $raw_patterns ) { $api_url = 'http://api.wordpress.org/patterns/1.0/?' . build_query( $query_args ); if ( wp_http_supports( array( 'ssl' ) ) ) { $api_url = set_url_scheme( $api_url, 'https' ); } /* * Default to a short TTL, to mitigate cache stampedes on high-traffic sites. * This assumes that most errors will be short-lived, e.g., packet loss that causes the * first request to fail, but a follow-up one will succeed. The value should be high * enough to avoid stampedes, but low enough to not interfere with users manually * re-trying a failed request. */ $cache_ttl = 5; $wporg_response = wp_remote_get( $api_url ); $raw_patterns = json_decode( wp_remote_retrieve_body( $wporg_response ) ); if ( is_wp_error( $wporg_response ) ) { $raw_patterns = $wporg_response; } elseif ( ! is_array( $raw_patterns ) ) { // HTTP request succeeded, but response data is invalid. $raw_patterns = new WP_Error( 'pattern_api_failed', sprintf( /* translators: %s: Support forums URL. */ __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the <a href="%s">support forums</a>.' ), __( 'https://wordpress.org/support/forums/' ) ), array( 'response' => wp_remote_retrieve_body( $wporg_response ), ) ); } else { // Response has valid data. $cache_ttl = HOUR_IN_SECONDS; } set_site_transient( $transient_key, $raw_patterns, $cache_ttl ); } if ( is_wp_error( $raw_patterns ) ) { $raw_patterns->add_data( array( 'status' => 500 ) ); return $raw_patterns; } $response = array(); if ( $raw_patterns ) { foreach ( $raw_patterns as $pattern ) { $response[] = $this->prepare_response_for_collection( $this->prepare_item_for_response( $pattern, $request ) ); } } return new WP_REST_Response( $response ); }
Expand full source codeCollapse full source codeView on TracView on GitHub
Changelog
Version | Description |
---|---|
6.0.0 | Added 'slug' to request. |
5.8.0 | Introduced. |