= $this->get_all_registered(); if ( ! $all_templates ) { return null; } foreach ( $all_templates as $template ) { if ( $template->slug === $template_slug ) { return $template; } } return null; } /** * Retrieves registered templates matching a query. * * @since 6.7.0 * * @param array $query { * Arguments to retrieve templates. Optional, empty by default. * * @type string[] $slug__in List of slugs to include. * @type string[] $slug__not_in List of slugs to skip. * @type string $post_type Post type to get the templates for. * } * @return WP_Block_Template[] Associative array of `$template_name => $template` pairs. */ public function get_by_query( $query = array() ) { $all_templates = $this->get_all_registered(); if ( ! $all_templates ) { return array(); } $query = wp_parse_args( $query, array( 'slug__in' => array(), 'slug__not_in' => array(), 'post_type' => '', ) ); $slugs_to_include = $query['slug__in']; $slugs_to_skip = $query['slug__not_in']; $post_type = $query['post_type']; $matching_templates = array(); foreach ( $all_templates as $template_name => $template ) { if ( $slugs_to_include && ! in_array( $template->slug, $slugs_to_include, true ) ) { continue; } if ( $slugs_to_skip && in_array( $template->slug, $slugs_to_skip, true ) ) { continue; } if ( $post_type && ! in_array( $post_type, $template->post_types, true ) ) { continue; } $matching_templates[ $template_name ] = $template; } return $matching_templates; } /** * Checks if a template is registered. * * @since 6.7.0 * * @param string $template_name Template name. * @return bool True if the template is registered, false otherwise. */ public function is_registered( $template_name ) { return isset( $this->registered_templates[ $template_name ] ); } /** * Unregisters a template. * * @since 6.7.0 * * @param string $template_name Template name including namespace. * @return WP_Block_Template|WP_Error The unregistered template on success, or WP_Error on failure. */ public function unregister( $template_name ) { if ( ! $this->is_registered( $template_name ) ) { _doing_it_wrong( __METHOD__, /* translators: %s: Template name. */ sprintf( __( 'Template "%s" is not registered.' ), $template_name ), '6.7.0' ); /* translators: %s: Template name. */ return new WP_Error( 'template_not_registered', __( 'Template "%s" is not registered.' ) ); } $unregistered_template = $this->registered_templates[ $template_name ]; unset( $this->registered_templates[ $template_name ] ); return $unregistered_template; } /** * Utility method to retrieve the main instance of the class. * * The instance will be created if it does not exist yet. * * @since 6.7.0 * * @return WP_Block_Templates_Registry The main instance. */ public static function get_instance() { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } }