PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-seo / src / class-organization-schema-node.php
jetpack / jetpack_vendor / automattic / jetpack-seo / src Last commit date
class-admin-page.php 3 weeks ago class-ai-crawlers.php 3 weeks ago class-ai-seo-enhancer.php 3 days ago class-author-schema-node.php 1 month ago class-breadcrumb-schema-node.php 1 month ago class-content-coverage.php 3 weeks ago class-dashboard-data.php 2 weeks ago class-initializer.php 3 days ago class-llms-txt.php 3 weeks ago class-local-business-schema-node.php 1 month ago class-organization-schema-node.php 1 month ago class-post-schema-node.php 1 month ago class-post-types.php 3 weeks ago class-schema-builder.php 1 month ago class-schema-graph.php 1 month ago class-schema-node-ids.php 1 month ago class-schema-settings-controller.php 1 month ago class-schema-settings.php 1 month ago class-surface-visibility.php 2 weeks ago class-website-schema-node.php 1 month ago
class-organization-schema-node.php
127 lines
1 <?php
2 /**
3 * Site-level Organization Schema.org node builder.
4 *
5 * Builds the Organization JSON-LD node that represents the site as a publishing
6 * entity. Most properties come straight from existing site identity — Site Title,
7 * site URL, Site Logo / Site Icon, and Tagline — so the node is useful with zero
8 * configuration. Properties with no WordPress source (social profiles `sameAs`,
9 * `email`) come from the schema settings, passed in via `$settings`; they are
10 * simply omitted until configured, so an unconfigured site still emits a valid
11 * node.
12 *
13 * The `$settings` argument carries the effective values from
14 * {@see Schema_Settings::get_organization()}: admin overrides for site-identity
15 * fields, plus the `sameAs` / `email` values WordPress can't supply.
16 *
17 * @package automattic/jetpack-seo-package
18 */
19
20 namespace Automattic\Jetpack\SEO;
21
22 /**
23 * Builds the site-level Organization node.
24 */
25 class Organization_Schema_Node {
26
27 /**
28 * Build the Organization node, or null when the site has no name to identify
29 * it (an Organization entity with no name is not useful, so we emit nothing
30 * rather than something invalid).
31 *
32 * @param array $settings Optional schema settings: `name`, `description`,
33 * `sameAs` (array of URLs), `email`. Empty values fall
34 * back to site identity (or are omitted entirely).
35 * @return array|null
36 */
37 public static function build( array $settings = array() ) {
38 $name = self::text( $settings['name'] ?? '' );
39 if ( '' === $name ) {
40 $name = self::text( get_bloginfo( 'name' ) );
41 }
42 if ( '' === $name ) {
43 return null;
44 }
45
46 $node = array(
47 '@type' => 'Organization',
48 '@id' => Schema_Node_Ids::organization(),
49 'name' => $name,
50 'url' => home_url( '/' ),
51 );
52
53 $description = self::text( $settings['description'] ?? '' );
54 if ( '' === $description ) {
55 $description = self::text( get_bloginfo( 'description' ) );
56 }
57 if ( '' !== $description ) {
58 $node['description'] = $description;
59 }
60
61 $logo = self::logo();
62 if ( null !== $logo ) {
63 $node['logo'] = $logo;
64 }
65
66 $same_as = Schema_Settings::sanitize_url_list( $settings['sameAs'] ?? array() );
67 if ( ! empty( $same_as ) ) {
68 $node['sameAs'] = $same_as;
69 }
70
71 $email = isset( $settings['email'] ) ? sanitize_email( (string) $settings['email'] ) : '';
72 if ( '' !== $email ) {
73 // Only from explicit settings — never auto-filled from admin_email.
74 $node['email'] = $email;
75 }
76
77 return $node;
78 }
79
80 /**
81 * The site logo as an ImageObject: the Site Logo (Customizer) when set,
82 * otherwise the Site Icon. Null when the site has neither.
83 *
84 * @return array|null
85 */
86 private static function logo() {
87 $custom_logo_id = get_theme_mod( 'custom_logo' );
88 if ( $custom_logo_id ) {
89 $src = wp_get_attachment_image_src( $custom_logo_id, 'full' );
90 if ( is_array( $src ) && ! empty( $src[0] ) ) {
91 $image = array(
92 '@type' => 'ImageObject',
93 'url' => $src[0],
94 );
95 if ( ! empty( $src[1] ) && ! empty( $src[2] ) ) {
96 $image['width'] = (int) $src[1];
97 $image['height'] = (int) $src[2];
98 }
99 return $image;
100 }
101 }
102
103 $icon_url = get_site_icon_url();
104 if ( $icon_url ) {
105 return array(
106 '@type' => 'ImageObject',
107 'url' => $icon_url,
108 );
109 }
110
111 return null;
112 }
113
114 /**
115 * Normalize a scalar setting/site value to trimmed plain text.
116 *
117 * @param mixed $value Raw value.
118 * @return string
119 */
120 private static function text( $value ) {
121 if ( ! is_string( $value ) ) {
122 return '';
123 }
124 return trim( wp_strip_all_tags( $value ) );
125 }
126 }
127