*/ public static function build(): array { $options = Settings::get(); $visibility = self::resolve_visibility( $options ); $site_url = home_url( '/' ); $site_name = get_bloginfo( 'name' ); $site_desc = get_bloginfo( 'description' ); $locale = get_locale(); $organization_context = null; if ( $visibility['organization'] || $visibility['article'] ) { $organization_context = Organization::build( $options, $site_name, $site_url ); } $website_context = $visibility['website'] ? Website::build( $site_name, $site_url, $locale ) : null; $webpage_context = WebPage::from_current_query( $site_name, $site_desc, $locale ); $breadcrumb_context = $visibility['breadcrumb'] ? Breadcrumb::from_current_query( $site_name, $site_url ) : null; $article_context = null; if ( $visibility['article'] ) { $article_context = Article::from_current_query( $options, $site_name, $site_desc, $organization_context ?? Organization::build( $options, $site_name, $site_url ) ); } $author_context = Author::from_current_query(); return array( 'organization' => ( $visibility['organization'] && $organization_context ) ? $organization_context->to_array() : array(), 'website' => ( $visibility['website'] && $website_context ) ? $website_context->to_array() : array(), 'webpage' => $webpage_context, 'breadcrumb' => ( $visibility['breadcrumb'] && $breadcrumb_context ) ? $breadcrumb_context->to_array() : array(), 'article' => ( $visibility['article'] && $article_context ) ? $article_context->to_array() : array(), 'author' => $author_context, ); } /** * Resolve visibility configuration from options. * * @param array $options Schema options. * * @return array */ private static function resolve_visibility( array $options ): array { $defaults = array( 'organization' => false, 'website' => false, 'breadcrumb' => false, 'article' => false, ); if ( empty( $options['visibility'] ) || ! is_array( $options['visibility'] ) ) { return $defaults; } return array( 'organization' => ! empty( $options['visibility']['organization'] ), 'website' => ! empty( $options['visibility']['website'] ), 'breadcrumb' => ! empty( $options['visibility']['breadcrumb'] ), 'article' => ! empty( $options['visibility']['article'] ), ); } }