e_type['value'],
];
}
foreach ( $this->schema_types->get_page_type_options() as $page_type ) {
$schema['pageTypes'][ $page_type['value'] ] = [
'label' => $page_type['name'],
'value' => $page_type['value'],
];
}
$schema['articleTypeDefaults'] = [];
$schema['pageTypeDefaults'] = [];
foreach ( $post_types as $name => $post_type ) {
$schema['articleTypeDefaults'][ $name ] = WPSEO_Options::get_default( 'wpseo_titles', "schema-article-type-$name" );
$schema['pageTypeDefaults'][ $name ] = WPSEO_Options::get_default( 'wpseo_titles', "schema-page-type-$name" );
}
return $schema;
}
/**
* Transforms the post types, to represent them.
*
* @param WP_Post_Type[] $post_types The WP_Post_Type array to transform.
*
* @return array The post types.
*/
protected function transform_post_types( $post_types ) {
$transformed = [];
$new_post_types = $this->options->get( 'new_post_types', [] );
foreach ( $post_types as $post_type ) {
$transformed[ $post_type->name ] = [
'name' => $post_type->name,
'route' => $this->get_route( $post_type->name, $post_type->rewrite, $post_type->rest_base ),
'label' => $post_type->label,
'singularLabel' => $post_type->labels->singular_name,
'hasArchive' => $this->post_type_helper->has_archive( $post_type ),
'hasSchemaArticleType' => $this->article_helper->is_article_post_type( $post_type->name ),
'menuPosition' => $post_type->menu_position,
'isNew' => \in_array( $post_type->name, $new_post_types, true ),
];
}
\uasort( $transformed, [ $this, 'compare_post_types' ] );
return $transformed;
}
/**
* Compares two post types.
*
* @param array $a The first post type.
* @param array $b The second post type.
*
* @return int The order.
*/
protected function compare_post_types( $a, $b ) {
if ( $a['menuPosition'] === null && $b['menuPosition'] !== null ) {
return 1;
}
if ( $a['menuPosition'] !== null && $b['menuPosition'] === null ) {
return -1;
}
if ( $a['menuPosition'] === null && $b['menuPosition'] === null ) {
// No position specified, order alphabetically by label.
return \strnatcmp( $a['label'], $b['label'] );
}
return ( ( $a['menuPosition'] < $b['menuPosition'] ) ? -1 : 1 );
}
/**
* Transforms the taxonomies, to represent them.
*
* @param WP_Taxonomy[] $taxonomies The WP_Taxonomy array to transform.
* @param string[] $post_type_names The post type names.
*
* @return array The taxonomies.
*/
protected function transform_taxonomies( $taxonomies, $post_type_names ) {
$transformed = [];
$new_taxonomies = $this->options->get( 'new_taxonomies', [] );
foreach ( $taxonomies as $taxonomy ) {
$transformed[ $taxonomy->name ] = [
'name' => $taxonomy->name,
'route' => $this->get_route( $taxonomy->name, $taxonomy->rewrite, $taxonomy->rest_base ),
'label' => $taxonomy->label,
'showUi' => $taxonomy->show_ui,
'singularLabel' => $taxonomy->labels->singular_name,
'postTypes' => \array_filter(
$taxonomy->object_type,
static function ( $object_type ) use ( $post_type_names ) {
return \in_array( $object_type, $post_type_names, true );
}
),
'isNew' => \in_array( $taxonomy->name, $new_taxonomies, true ),
];
}
\uasort(
$transformed,
static function ( $a, $b ) {
return \strnatcmp( $a['label'], $b['label'] );
}
);
return $transformed;
}
/**
* Gets the route from a name, rewrite and rest_base.
*
* @param string $name The name.
* @param array $rewrite The rewrite data.
* @param string $rest_base The rest base.
*
* @return string The route.
*/
protected function get_route( $name, $rewrite, $rest_base ) {
$route = $name;
if ( isset( $rewrite['slug'] ) ) {
$route = $rewrite['slug'];
}
if ( ! empty( $rest_base ) ) {
$route = $rest_base;
}
// Always strip leading slashes.
while ( \substr( $route, 0, 1 ) === '/' ) {
$route = \substr( $route, 1 );
}
return \rawurlencode( $route );
}
/**
* Retrieves the fallbacks.
*
* @return array The fallbacks.
*/
protected function get_fallbacks() {
$site_logo_id = \get_option( 'site_logo' );
if ( ! $site_logo_id ) {
$site_logo_id = \get_theme_mod( 'custom_logo' );
}
if ( ! $site_logo_id ) {
$site_logo_id = '0';
}
return [
'siteLogoId' => $site_logo_id,
];
}
}