115 lines
2.7 KiB
PHP
115 lines
2.7 KiB
PHP
<?php
|
|
/**
|
|
* WPSEO plugin file.
|
|
*
|
|
* @package WPSEO\Frontend\Schema
|
|
*/
|
|
|
|
/**
|
|
* Returns schema Organization data.
|
|
*
|
|
* @since 10.2
|
|
*/
|
|
class WPSEO_Schema_Organization implements WPSEO_Graph_Piece {
|
|
|
|
/**
|
|
* A value object with context variables.
|
|
*
|
|
* @var WPSEO_Schema_Context
|
|
*/
|
|
private $context;
|
|
|
|
/**
|
|
* WPSEO_Schema_Organization constructor.
|
|
*
|
|
* @param WPSEO_Schema_Context $context A value object with context variables.
|
|
*/
|
|
public function __construct( WPSEO_Schema_Context $context ) {
|
|
$this->context = $context;
|
|
}
|
|
|
|
/**
|
|
* Determines whether an Organization graph piece should be added.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function is_needed() {
|
|
return ( $this->context->site_represents === 'company' );
|
|
}
|
|
|
|
/**
|
|
* Returns the Organization Schema data.
|
|
*
|
|
* @return array $data The Organization schema.
|
|
*/
|
|
public function generate() {
|
|
$data = [
|
|
'@type' => 'Organization',
|
|
'@id' => $this->context->site_url . WPSEO_Schema_IDs::ORGANIZATION_HASH,
|
|
'name' => $this->context->company_name,
|
|
'url' => $this->context->site_url,
|
|
'sameAs' => $this->fetch_social_profiles(),
|
|
];
|
|
$data = $this->add_logo( $data );
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Adds a site's logo.
|
|
*
|
|
* @param array $data The Organization schema.
|
|
*
|
|
* @return array $data The Organization schema.
|
|
*/
|
|
private function add_logo( $data ) {
|
|
$schema_id = $this->context->site_url . WPSEO_Schema_IDs::ORGANIZATION_LOGO_HASH;
|
|
$schema_image = new WPSEO_Schema_Image( $schema_id );
|
|
$data['logo'] = $schema_image->generate_from_attachment_id( $this->context->company_logo_id, $this->context->company_name );
|
|
$data['image'] = [ '@id' => $schema_id ];
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Retrieve the social profiles to display in the organization schema.
|
|
*
|
|
* @since 1.8
|
|
*
|
|
* @link https://developers.google.com/webmasters/structured-data/customize/social-profiles
|
|
*
|
|
* @return array $profiles An array of social profiles.
|
|
*/
|
|
private function fetch_social_profiles() {
|
|
$profiles = [];
|
|
$social_profiles = [
|
|
'facebook_site',
|
|
'instagram_url',
|
|
'linkedin_url',
|
|
'myspace_url',
|
|
'youtube_url',
|
|
'pinterest_url',
|
|
'wikipedia_url',
|
|
];
|
|
foreach ( $social_profiles as $profile ) {
|
|
if ( WPSEO_Options::get( $profile, '' ) !== '' ) {
|
|
$profiles[] = WPSEO_Options::get( $profile );
|
|
}
|
|
}
|
|
|
|
if ( WPSEO_Options::get( 'twitter_site', '' ) !== '' ) {
|
|
$profiles[] = 'https://twitter.com/' . WPSEO_Options::get( 'twitter_site' );
|
|
}
|
|
|
|
/**
|
|
* Filter: 'wpseo_schema_organization_social_profiles' - Allows filtering social profiles for the
|
|
* represented organization.
|
|
*
|
|
* @api string[] $profiles
|
|
*/
|
|
$profiles = apply_filters( 'wpseo_schema_organization_social_profiles', $profiles );
|
|
|
|
return $profiles;
|
|
}
|
|
}
|