Yoast\WP\SEO\Schema_Aggregator\Application\Meta
Response_Meta_Provider{}
Provides metadata for API responses.
Хуков нет.
Использование
$Response_Meta_Provider = new Response_Meta_Provider(); // use class methods
Методы
- public __construct( Schema_Map_Indexable_Repository $schema_map_repository, Schema_Map_Builder $schema_map_builder )
- public get_metadata( string $post_type, int $page, int $page_size )
- private maybe_add_pagination_metadata(
Код Response_Meta_Provider{} Response Meta Provider{} Yoast 27.7
class Response_Meta_Provider {
/**
* The schema map indexable repository.
*
* @var Schema_Map_Indexable_Repository
*/
private $schema_map_repository;
/**
* The schema map builder.
*
* @var Schema_Map_Builder
*/
private $schema_map_builder;
/**
* Response_Meta_Provider constructor.
*
* @param Schema_Map_Indexable_Repository $schema_map_repository The schema map indexable repository.
* @param Schema_Map_Builder $schema_map_builder The schema map builder.
*/
public function __construct( Schema_Map_Indexable_Repository $schema_map_repository, Schema_Map_Builder $schema_map_builder ) {
$this->schema_map_repository = $schema_map_repository;
$this->schema_map_builder = $schema_map_builder;
}
/**
* Build metadata structure for API response
*
* @param string $post_type The post type being queried.
* @param int $page The page number (1-based).
* @param int $page_size The number of items per page.
*
* @return array<string,array<string>> Metadata structure.
*/
public function get_metadata( string $post_type, int $page, int $page_size ): array {
$metadata = [
'generator' => [
'name' => 'Yoast NLWeb Integration',
'version' => \WPSEO_VERSION,
'vendor' => 'Yoast',
'url' => 'https://yoast.com',
],
'dependencies' => [
'wordpress' => \function_exists( 'get_bloginfo' ) ? \get_bloginfo( 'version' ) : 'unknown',
'yoast_seo' => \WPSEO_VERSION,
],
'generated_at' => \gmdate( 'Y-m-d\TH:i:s\Z' ),
];
if ( \defined( 'WPSEO_WOO_VERSION' ) ) {
$metadata['dependencies']['yoast_seo_woocommerce'] = \WPSEO_WOO_VERSION;
}
return $this->maybe_add_pagination_metadata( $metadata, $post_type, $page, $page_size );
}
/**
* Add pagination metadata to the response if applicable.
*
* @param array<string,array<string>> $metadata The metadata array to add pagination info to.
* @param string $post_type The post type being queried.
* @param int $page The current page number (1-based).
* @param int $page_size The number of items per page.
*
* @return array<string,array<string>> The updated metadata array.
*/
private function maybe_add_pagination_metadata(
array $metadata,
string $post_type,
int $page,
int $page_size
): array {
$indexable_count = $this->schema_map_repository->get_indexable_count_for_post_type( $post_type );
$total_items = $indexable_count->get_count();
if ( $total_items === 0 ) {
return $metadata;
}
$total_pages = (int) \ceil( $total_items / $page_size );
if ( $page < $total_pages ) {
$next_page_url = $this->schema_map_builder->get_rest_route( $post_type, ( $page + 1 ) );
$metadata['next'] = $next_page_url;
}
return $metadata;
}
}