244 lines
6.1 KiB
PHP
244 lines
6.1 KiB
PHP
<?php
|
|
/**
|
|
* WPSEO plugin file.
|
|
*
|
|
* @package WPSEO\Frontend\Schema
|
|
*/
|
|
|
|
/**
|
|
* Context variables for Schema generation.
|
|
*
|
|
* @property string $canonical The current page's canonical.
|
|
* @property string $company_name Holds the company name, if the site represents a company.
|
|
* @property int $company_logo_id Holds the company logo's ID, if the site represents a company.
|
|
* @property int $id The post ID, if there is one.
|
|
* @property string $site_name The site's name.
|
|
* @property string $site_description The site's tagline.
|
|
* @property string $site_represents Whether this site represents a `company` or a `person`.
|
|
* @property string $site_url The site's URL.
|
|
* @property int $site_user_id The site's user ID if a site represents a `person`.
|
|
* @property string $title Page title.
|
|
* @property string $description Page description.
|
|
* @property bool $breadcrumbs_enabled Whether or not this site has breadcrumbs enabled.
|
|
* @property array $site_represents_reference A schema @id reference to the piece the site represents.
|
|
* @property bool $has_image A boolean that determines whether the current URL has a primary image.
|
|
*
|
|
* @since 10.2
|
|
*/
|
|
class WPSEO_Schema_Context {
|
|
|
|
/**
|
|
* The current page's canonical.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $canonical;
|
|
|
|
/**
|
|
* Holds the company name, if the site represents a company.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $company_name;
|
|
|
|
/**
|
|
* Holds the company logo's ID, if the site represents a company.
|
|
*
|
|
* @var int
|
|
*/
|
|
public $company_logo_id;
|
|
|
|
/**
|
|
* The queried object ID, if there is one.
|
|
*
|
|
* @var int
|
|
*/
|
|
public $id;
|
|
|
|
/**
|
|
* Whether this site represents a `company` or a `person`.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $site_represents;
|
|
|
|
/**
|
|
* The site's Name.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $site_name;
|
|
|
|
/**
|
|
* The site's tagline.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $site_description;
|
|
|
|
/**
|
|
* The site's URL.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $site_url;
|
|
|
|
/**
|
|
* Page title.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $title;
|
|
|
|
/**
|
|
* User ID when the site represents a Person.
|
|
*
|
|
* @var int
|
|
*/
|
|
public $site_user_id;
|
|
|
|
/**
|
|
* Page description.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $description;
|
|
|
|
/**
|
|
* Whether or not this site has breadcrumbs enabled.
|
|
*
|
|
* @var bool
|
|
*/
|
|
public $breadcrumbs_enabled;
|
|
|
|
/**
|
|
* A schema @id reference to the piece the site represents.
|
|
*
|
|
* @var array
|
|
*/
|
|
public $site_represents_reference;
|
|
|
|
/**
|
|
* A boolean that determines whether the current URL has a primary image.
|
|
*
|
|
* @var bool
|
|
*/
|
|
public $has_image = false;
|
|
|
|
/**
|
|
* WPSEO_Schema_Context constructor.
|
|
*/
|
|
public function __construct() {
|
|
$this->build_data();
|
|
}
|
|
|
|
/**
|
|
* Builds all the required data for the context object.
|
|
*/
|
|
private function build_data() {
|
|
// Page level variables.
|
|
$front = WPSEO_Frontend::get_instance();
|
|
$this->canonical = $front->canonical( false, false, true );
|
|
$this->title = $front->title( '' );
|
|
$this->description = $front->metadesc( false );
|
|
$this->id = get_queried_object_id();
|
|
|
|
// Site level variables.
|
|
$this->site_name = $this->set_site_name();
|
|
$this->site_description = get_bloginfo( 'description' );
|
|
$this->site_url = trailingslashit( WPSEO_Utils::home_url() );
|
|
|
|
$this->set_breadcrumbs_variables();
|
|
$this->set_site_represents_variables();
|
|
$this->set_site_represents_reference();
|
|
}
|
|
|
|
/**
|
|
* Retrieves the site's name from settings.
|
|
*
|
|
* @return string
|
|
*/
|
|
private function set_site_name() {
|
|
if ( WPSEO_Options::get( 'website_name', '' ) !== '' ) {
|
|
return WPSEO_Options::get( 'website_name' );
|
|
}
|
|
|
|
return get_bloginfo( 'name' );
|
|
}
|
|
|
|
/**
|
|
* Sets our site represents reference for easy use.
|
|
*/
|
|
private function set_site_represents_reference() {
|
|
$this->site_represents_reference = false;
|
|
|
|
if ( $this->site_represents === 'person' ) {
|
|
$this->site_represents_reference = [ '@id' => WPSEO_Schema_Utils::get_user_schema_id( $this->site_user_id, $this ) ];
|
|
}
|
|
|
|
if ( $this->site_represents === 'company' ) {
|
|
$this->site_represents_reference = [ '@id' => $this->site_url . WPSEO_Schema_IDs::ORGANIZATION_HASH ];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Determines what our site represents, and grabs their values.
|
|
*/
|
|
private function set_site_represents_variables() {
|
|
$this->site_represents = WPSEO_Options::get( 'company_or_person', false );
|
|
|
|
switch ( $this->site_represents ) {
|
|
case 'company':
|
|
$company_name = WPSEO_Options::get( 'company_name' );
|
|
|
|
/**
|
|
* Filter: 'wpseo_schema_company_name' - Allows filtering company name
|
|
*
|
|
* @api string $company_name.
|
|
*/
|
|
$this->company_name = apply_filters( 'wpseo_schema_company_name', $company_name );
|
|
|
|
// Do not use a non-named company.
|
|
if ( empty( $this->company_name ) ) {
|
|
$this->site_represents = false;
|
|
break;
|
|
}
|
|
|
|
$company_logo_id = WPSEO_Image_Utils::get_attachment_id_from_settings( 'company_logo' );
|
|
|
|
/**
|
|
* Filter: 'wpseo_schema_company_logo_id' - Allows filtering company logo id
|
|
*
|
|
* @api integer $company_logo_id.
|
|
*/
|
|
$this->company_logo_id = apply_filters( 'wpseo_schema_company_logo_id', $company_logo_id );
|
|
|
|
/*
|
|
* Do not use a company without a logo.
|
|
* This is not a false check due to how `get_attachment_id_from_settings` works.
|
|
*/
|
|
if ( $this->company_logo_id < 1 ) {
|
|
$this->site_represents = false;
|
|
}
|
|
break;
|
|
case 'person':
|
|
$this->site_user_id = WPSEO_Options::get( 'company_or_person_user_id', false );
|
|
// Do not use a non-existing user.
|
|
if ( $this->site_user_id !== false && get_user_by( 'id', $this->site_user_id ) === false ) {
|
|
$this->site_represents = false;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Determines whether the site uses Yoast SEO breadcrumbs.
|
|
*/
|
|
private function set_breadcrumbs_variables() {
|
|
$this->breadcrumbs_enabled = current_theme_supports( 'yoast-seo-breadcrumbs' );
|
|
if ( ! $this->breadcrumbs_enabled ) {
|
|
$this->breadcrumbs_enabled = WPSEO_Options::get( 'breadcrumbs-enable', false );
|
|
}
|
|
}
|
|
}
|