0VQ'VP(VLVHVQЦ'V8P(VO V P VP(VP(V(O(VP(V`O V  VQ(VhN(V(Q(V @Q(VXQ(VV @0V@V @p V&V VM(VQ(VP +VV @PVDV`VVHR(VV`R(V@V "'%V@&V  /V&VV @EV(1VR(VYVhV @m'V@&V H V8S(VQ(VPS(VhS(VS(VVDz VS(V0S(VXVQpt!VS(VQ(VVQ~V(T(VT(VT(VM(VT(VS(VV @T(VU(VU(V0U(VR(V`&V 6V`U(VR(V?#V @pVU(VXU(VU(VR(VVD?$V@#V @ V&V V&V VVD0V8V(VU(VPV(VhV(VjV @0VVDpO;VVDCVV(V>VV(Vx=V@@#V @V&V `V VD:VVD65VXW(VU(VpW(V5V "Vh@#V @ VPVD0?V&V ЍV@#V @V0VDP<VX(VW(V@VD0G:VHX(V`X(VXH:V!V pVD@?V&V @V@#V @V`VD ?VX(VW(VY(V Y(V5V#V"VD @V &V V@#V @VVDp?VY(VW(VY(VY(Vh5VY(VW(V@&V VVDT3VVD @VXZ(VX(VpZ(Vq,V1B(V9(V_show_search_engines_discouraged_notification() { return $this->search_engines_are_discouraged() && $this->options_helper->get( 'ignore_search_engines_discouraged_notice', false ) === false; } /** * Remove the search engines discouraged notification if it exists. * * @return void */ protected function remove_search_engines_discouraged_notification_if_exists() { $this->notification_center->remove_notification_by_id( self::NOTIFICATION_ID ); } /** * Add the search engines discouraged notification if it does not exist yet. * * @return void */ protected function maybe_add_search_engines_discouraged_notification() { if ( ! $this->notification_center->get_notification_by_id( self::NOTIFICATION_ID ) ) { $notification = $this->notification(); $this->notification_helper->restore_notification( $notification ); $this->notification_center->add_notification( $notification ); } } /** * Checks whether search engines are discouraged from indexing the site. * * @return bool Whether search engines are discouraged from indexing the site. */ protected function search_engines_are_discouraged() { return (string) \get_option( 'blog_public' ) === '0'; } /** * Whether the search engines notice should be shown. * * @return bool */ protected function should_show_search_engines_discouraged_notice() { $pages_to_show_notice = [ 'index.php', 'plugins.php', 'update-core.php', ]; return ( $this->search_engines_are_discouraged() && $this->capability_helper->current_user_can( 'manage_options' ) && $this->options_helper->get( 'ignore_search_engines_discouraged_notice', false ) === false && ( $this->current_page_helper->is_yoast_seo_page() || \in_array( $this->current_page_helper->get_current_admin_page(), $pages_to_show_notice, true ) ) && $this->current_page_helper->get_current_yoast_seo_page() !== 'wpseo_dashboard' ); } /** * Show the search engines discouraged notice. * * @return void */ protected function show_search_engines_discouraged_notice() { \printf( '
%1$s
', // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output from present() is considered safe. $this->presenter->present() ); } /** * Returns an instance of the notification. * * @return Yoast_Notification The notification to show. */ protected function notification() { return new Yoast_Notification( $this->presenter->present(), [ 'type' => Yoast_Notification::ERROR, 'id' => self::NOTIFICATION_ID, 'capabilities' => 'wpseo_manage_options', 'priority' => 1, ] ); } } Calendar - Liebfrauenmünster St. Moritz !👳‍♀️!👳‍♂️!👷‍♀️!👷‍♂️!💁‍♀️!💁‍♂️!💂‍♀️!💂‍♂️!💆‍♀️!💆‍♂️!💇‍♀️!💇‍♂️!🙂‍↔️!🙂‍↕️!🙅‍♀️!🙅‍♂️!🙆‍♀️!🙆‍♂️!🙇‍♀️!🙇‍♂️!🙋‍♀️!🙋‍♂️!🙍‍♀️!🙍‍♂️!🙎‍♀️!🙎‍♂️!🚣‍♀️!🚣‍♂️!🚴‍♀️!🚴‍♂️!🚵‍♀️!🚵‍♂️!🚶‍♀️!🚶‍♂️!🚶‍➡️!🤦‍♀️!🤦‍♂️!🤵‍♀️!🤵‍♂️!🤷‍♀️!🤷‍♂️!🤸‍♀️!🤸‍♂️!🤹‍♀️!🤹‍♂️!🤼‍♀️!🤼‍♂️!🤽‍♀️!🤽‍♂️!🤾‍♀️!🤾‍♂️!🦸‍♀️!🦸‍♂️!🦹‍♀️!🦹‍♂️!🧍‍♀️!🧍‍♂️!🧎‍♀️!🧎‍♂️!🧎‍➡️!🧏‍♀️!🧏‍♂️!🧑‍⚕️!🧑‍⚖️r 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; } }