;g g@4g;g8=/;g;g;g;g-Z;gPQ;gn;g;g 8*g3;ga;g;g;gdz@8;g\;ga;g`;gg((;gh=/;g;g;g ;g`\;g ;g ;g g;g;g;g;g;g\;g@ ;gh:g@ ;g ;g;g;g;g;gQ;g ;g ;g @;g ;g;g;g;gQ;g ;g ;g ;g@;g0;g;g@;g\;g ;gp:g;g g:;g=/;gP;g;g;g `=;gp;g@@ ;g@$;gg g0;g;g`;g;g`2;g;g ;g;g@$;gP;g;g ;g ;g 3;g;g@xU;g%;g g0gN;gU;g=/;g;g;g ;g Q;g@ ;g@9;g@ ;g;g;g;g;g ;g>@;gx ;g5;g;gg g];g ;g;g=/;g ;gIW `;g0\;g<;g;gg4;g@;g0;g ;g`j 7;g\;g ;g;g gA;g;gP;g`;g ;gt@D;g \;g ;g@;g;g=/;gp;g=/;g ;g;gX ;g ;gr user. * * @param array $data The schema data we have for this person. * @param int $user_id The current user we're collecting schema data for. */ $data = \apply_filters( 'wpseo_schema_person_data', $data, $user_id ); return $data; } /** * Returns an ImageObject for the persons avatar. * * @param array $data The Person schema. * @param WP_User $user_data User data. * @param bool $add_hash Wether or not the person's image url hash should be added to the image id. * * @return array The Person schema. */ protected function add_image( $data, $user_data, $add_hash = false ) { $schema_id = $this->context->site_url . Schema_IDs::PERSON_LOGO_HASH; $data = $this->set_image_from_options( $data, $schema_id, $add_hash, $user_data ); if ( ! isset( $data['image'] ) ) { $data = $this->set_image_from_avatar( $data, $user_data, $schema_id, $add_hash ); } if ( \is_array( $this->type ) && \in_array( 'Organization', $this->type, true ) ) { $data_logo = isset( $data['image']['@id'] ) ? $data['image']['@id'] : $schema_id; $data['logo'] = [ '@id' => $data_logo ]; } return $data; } /** * Generate the person image from our settings. * * @param array $data The Person schema. * @param string $schema_id The string used in the `@id` for the schema. * @param bool $add_hash Whether or not the person's image url hash should be added to the image id. * @param WP_User $user_data User data. * * @return array The Person schema. */ protected function set_image_from_options( $data, $schema_id, $add_hash = false, $user_data = null ) { if ( $this->context->site_represents !== 'person' ) { return $data; } if ( \is_array( $this->context->person_logo_meta ) ) { $data['image'] = $this->helpers->schema->image->generate_from_attachment_meta( $schema_id, $this->context->person_logo_meta, $data['name'], $add_hash ); } return $data; } /** * Generate the person logo from gravatar. * * @param array $data The Person schema. * @param WP_User $user_data User data. * @param string $schema_id The string used in the `@id` for the schema. * @param bool $add_hash Wether or not the person's image url hash should be added to the image id. * * @return array The Person schema. */ protected function set_image_from_avatar( $data, $user_data, $schema_id, $add_hash = false ) { // If we don't have an image in our settings, fall back to an avatar, if we're allowed to. $show_avatars = \get_option( 'show_avatars' ); if ( ! $show_avatars ) { return $data; } $url = \get_avatar_url( $user_data->user_email ); if ( empty( $url ) ) { return $data; } $data['image'] = $this->helpers->schema->image->simple_image_object( $schema_id, $url, $user_data->display_name, $add_hash ); return $data; } /** * Returns an author's social site URL. * * @param string $social_site The social site to retrieve the URL for. * @param mixed $user_id The user ID to use function outside of the loop. * * @return string */ protected function url_social_site( $social_site, $user_id = false ) { $url = \get_the_author_meta( $social_site, $user_id ); if ( ! empty( $url ) && $social_site === 'twitter' ) { $url = 'https://twitter.com/' . $url; } return $url; } /** * Checks the site is represented by the same person as this indexable. * * @param WP_User $user_data User data. * * @return bool True when the site is represented by the same person as this indexable. */ protected function site_represents_current_author( $user_data = null ) { // Can only be the case when the site represents a user. if ( $this->context->site_represents !== 'person' ) { return false; } // Article post from the same user as the site represents. if ( $this->context->indexable->object_type === 'post' && $this->helpers->schema->article->is_author_supported( $this->context->indexable->object_sub_type ) && $this->context->schema_article_type !== 'None' ) { $user_id = ( ( ! \is_null( $user_data ) ) && ( isset( $user_data->ID ) ) ) ? $user_data->ID : $this->context->indexable->author_id; return $this->context->site_user_id === $user_id; } // Author archive from the same user as the site represents. return $this->context->indexable->object_type === 'user' && $this->context->site_user_id === $this->context->indexable->object_id; } /** * Builds our SameAs array. * * @param array $data The Person schema data. * @param WP_User $user_data The user data object. * @param int $user_id The user ID to use. * * @return array The Person schema data. */ protected function add_same_as_urls( $data, $user_data, $user_id ) { $same_as_urls = []; // Add the "Website" field from WordPress' contact info. if ( ! empty( $user_data->user_url ) ) { $same_as_urls[] = $user_data->user_url; } // Add the social profiles. $same_as_urls = $this->get_social_profiles( $same_as_urls, $user_id ); if ( ! empty( $same_as_urls ) ) { $same_as_urls = \array_values( \array_unique( $same_as_urls ) ); $data['sameAs'] = $same_as_urls; } return $data; } }