oont-contents/plugins/wp-rocket/inc/ThirdParty/Plugins/SEO/TheSEOFramework.php
2025-02-08 15:10:23 +01:00

86 lines
2.3 KiB
PHP

<?php
namespace WP_Rocket\ThirdParty\Plugins\SEO;
use The_SEO_Framework\Bridges\Sitemap;
use WP_Rocket\Admin\Options_Data;
use WP_Rocket\Event_Management\Subscriber_Interface;
class TheSEOFramework implements Subscriber_Interface {
/**
* Option instance.
*
* @var Options_Data
*/
protected $option;
/**
* Instantiate the class.
*
* @param Options_Data $option Option instance.
*/
public function __construct( Options_Data $option ) {
$this->option = $option;
}
/**
* Subscribed events.
*/
public static function get_subscribed_events() {
if ( ! function_exists( 'the_seo_framework' ) ) {
return [];
}
$tsf = the_seo_framework();
// Either TSF < 3.1, or the plugin's silenced (soft-disabled) via a drop-in.
if ( empty( $tsf->loaded ) ) {
return [];
}
/**
* 1. Performs option & other checks.
* 2. Checks for conflicting sitemap plugins that might prevent loading.
*
* These methods cache their output at runtime.
*
* @link https://github.com/wp-media/wp-rocket/issues/899
*/
if ( ! $tsf->can_run_sitemap() ) {
return [];
}
return [
'rocket_sitemap_preload_list' => [ 'add_tsf_sitemap_to_preload', 15 ],
];
}
/**
* Adds TSF sitemap URLs to preload.
*
* @param array $sitemaps Sitemaps to preload.
* @return array Updated Sitemaps to preload
*/
public function add_tsf_sitemap_to_preload( $sitemaps ) {
// The autoloader in TSF doesn't check for file_exists(). So, use version compare instead to prevent fatal errors.
if ( version_compare( rocket_get_constant( 'THE_SEO_FRAMEWORK_VERSION', false ), '4.0', '>=' ) ) {
// TSF 4.0+. Expect the class to exist indefinitely.
$sitemap_bridge = Sitemap::get_instance();
foreach ( $sitemap_bridge->get_sitemap_endpoint_list() as $id => $data ) {
// When the sitemap is good enough for a robots display, we determine it as valid for precaching.
// Non-robots display types are among the stylesheet endpoint, or the Yoast SEO-compatible endpoint.
// In other words, this enables support for ALL current and future public sitemap endpoints.
if ( ! empty( $data['robots'] ) ) {
$sitemaps[] = $sitemap_bridge->get_expected_sitemap_endpoint_url( $id );
}
}
} else {
// Deprecated. TSF <4.0.
$sitemaps[] = the_seo_framework()->get_sitemap_xml_url();
}
return $sitemaps;
}
}