PluginProbe
Yoast SEO – Advanced SEO with real-time guidance and built-in AI / 28.5
Yoast SEO – Advanced SEO with real-time guidance and built-in AI v28.5
28.5 28.4 28.3 28.2 28.1 28.0 27.9 27.8 27.7 27.6 27.5 trunk 18.0 18.1 18.2 18.3 18.4 18.4.1 18.5 18.5.1 18.6 18.7 18.8 18.9 19.0 All 129 releases
wordpress-seo / src / generators / schema / organization.php

organization.php in Yoast SEO – Advanced SEO with real-time guidance and built-in AI 28.5, at src/generators/schema/organization.php

89 lines 2.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Yoast\WP\SEO\Generators\Schema;
4
5 use Yoast\WP\SEO\Config\Schema_IDs;
6
7 /**
8 * Returns schema Organization data.
9 */
10 class Organization extends Abstract_Schema_Piece {
11
12 /**
13 * Determines whether an Organization graph piece should be added.
14 *
15 * @return bool
16 */
17 public function is_needed() {
18 return $this->context->site_represents === 'company';
19 }
20
21 /**
22 * Returns the Organization Schema data.
23 *
24 * @return array The Organization schema.
25 */
26 public function generate() {
27 $logo_schema_id = $this->context->site_url . Schema_IDs::ORGANIZATION_LOGO_HASH;
28
29 if ( $this->context->company_logo_meta ) {
30 $logo = $this->helpers->schema->image->generate_from_attachment_meta( $logo_schema_id, $this->context->company_logo_meta, $this->context->company_name );
31 }
32 else {
33 $logo = $this->helpers->schema->image->generate_from_attachment_id( $logo_schema_id, $this->context->company_logo_id, $this->context->company_name );
34 }
35
36 $organization = [
37 '@type' => 'Organization',
38 '@id' => $this->context->site_url . Schema_IDs::ORGANIZATION_HASH,
39 'name' => $this->helpers->schema->html->smart_strip_tags( $this->context->company_name ),
40 ];
41
42 if ( ! empty( $this->context->company_alternate_name ) ) {
43 $organization['alternateName'] = $this->context->company_alternate_name;
44 }
45
46 $organization['url'] = $this->context->site_url;
47 $organization['logo'] = $logo;
48 $organization['image'] = [ '@id' => $logo['@id'] ];
49
50 $same_as = \array_values( \array_unique( \array_filter( $this->fetch_social_profiles() ) ) );
51 if ( ! empty( $same_as ) ) {
52 $organization['sameAs'] = $same_as;
53 }
54
55 if ( \is_array( $this->context->schema_page_type ) && \in_array( 'ProfilePage', $this->context->schema_page_type, true ) ) {
56 $organization['mainEntityOfPage'] = [
57 '@id' => $this->context->main_schema_id,
58 ];
59 }
60
61 return $organization;
62 }
63
64 /**
65 * Retrieve the social profiles to display in the organization schema.
66 *
67 * @return array An array of social profiles.
68 */
69 private function fetch_social_profiles() {
70 $profiles = $this->helpers->social_profiles->get_organization_social_profiles();
71
72 if ( isset( $profiles['other_social_urls'] ) ) {
73 $other_social_urls = $profiles['other_social_urls'];
74 unset( $profiles['other_social_urls'] );
75 $profiles = \array_merge( $profiles, $other_social_urls );
76 }
77
78 /**
79 * Filter: 'wpseo_schema_organization_social_profiles' - Allows filtering social profiles for the
80 * represented organization.
81 *
82 * @param string[] $profiles
83 */
84 $profiles = \apply_filters( 'wpseo_schema_organization_social_profiles', $profiles );
85
86 return $profiles;
87 }
88 }
89