Files
thiet-ke-noi-that/wp-content/plugins/wp-rocket/inc/3rd-party/plugins/seo/the-seo-framework.php
2022-02-18 19:09:35 +07:00

154 lines
4.6 KiB
PHP

<?php
defined( 'ABSPATH' ) || exit;
/**
* This file is loaded at plugins_loaded, priority 10.
* This function is available at plugins_loaded, priority 5:
*/
if ( ! function_exists( 'the_seo_framework' ) ) {
return;
}
rocket_add_tsf_compat();
/**
* Runs detection and adds extra compatibility for The SEO Framework plugin.
*
* @since 3.2.1
* @since TODO Removed "conflicting sitemap detection" (detect_sitemap_plugin) call.
* TSF always tries to output it now while trying to give WP Rewrite priority for display.
* @author Sybre Waaijer
*/
function rocket_add_tsf_compat() {
$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() ) {
rocket_add_tsf_sitemap_compat();
}
}
/**
* Adds compatibility for the sitemap functionality in The SEO Framework plugin.
*
* @since 3.2.1
* @author Sybre Waaijer
*/
function rocket_add_tsf_sitemap_compat() {
add_filter( 'rocket_first_install_options', 'rocket_add_tsf_seo_sitemap_option' );
add_filter( 'rocket_inputs_sanitize', 'rocket_tsf_seo_sitemap_option_sanitize' );
add_filter( 'rocket_sitemap_preload_list', 'rocket_add_tsf_sitemap_to_preload' );
add_filter( 'rocket_sitemap_preload_options', 'rocket_sitemap_add_tsf_sitemap_to_preload_option' );
}
/**
* Adds a sitemap option in WP Rocket for The SEO Framework.
*
* @since 3.2.1
* @author Sybre Waaijer
* @source ./yoast-seo.php (Remy Perona)
*
* @param array $options WP Rocket options array.
* @return array Updated WP Rocket options array
*/
function rocket_add_tsf_seo_sitemap_option( $options ) {
$options['tsf_xml_sitemap'] = 0;
return $options;
}
/**
* Sanitizes the added sitemap option for The SEO Framework.
*
* @since 3.2.1
* @author Sybre Waaijer
* @source ./yoast-seo.php (Remy Perona)
*
* @param array $inputs WP Rocket inputs array.
* @return array Sanitized WP Rocket inputs array
*/
function rocket_tsf_seo_sitemap_option_sanitize( $inputs ) {
$inputs['tsf_xml_sitemap'] = ! empty( $inputs['tsf_xml_sitemap'] ) ? 1 : 0;
return $inputs;
}
/**
* Adds TSF sitemap URLs to preload.
*
* @since 3.2.1
* @since TODO Added compatibility support for The SEO Framework v4.0+
* @author Sybre Waaijer
* @source ./yoast-seo.php (Remy Perona)
*
* @param array $sitemaps Sitemaps to preload.
* @return array Updated Sitemaps to preload
*/
function rocket_add_tsf_sitemap_to_preload( $sitemaps ) {
if ( get_rocket_option( 'tsf_xml_sitemap', false ) ) {
// The autoloader in TSF doesn't check for file_exists(). So, use version compare instead to prevent fatal errors.
if ( version_compare( THE_SEO_FRAMEWORK_VERSION, '4.0', '>=' ) ) {
// TSF 4.0+. Expect the class to exist indefinitely.
$sitemap_bridge = The_SEO_Framework\Bridges\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;
}
/**
* Add The SEO Framework SEO option to WP Rocket settings
*
* @since 3.2.1
* @author Sybre Waaijer
* @source ./yoast-seo.php (Remy Perona)
*
* @param array $options WP Rocket settings array.
* @return array Updated WP Rocket settings array
*/
function rocket_sitemap_add_tsf_sitemap_to_preload_option( $options ) {
$options['tsf_xml_sitemap'] = [
'type' => 'checkbox',
'container_class' => [
'wpr-field--children',
],
'label' => __( 'The SEO Framework XML sitemap', 'rocket' ),
// translators: %s = Name of the plugin.
'description' => sprintf( __( 'We automatically detected the sitemap generated by the %s plugin. You can check the option to preload it.', 'rocket' ), 'The SEO Framework' ),
'parent' => 'sitemap_preload',
'section' => 'preload_section',
'page' => 'preload',
'default' => 0,
'sanitize_callback' => 'sanitize_checkbox',
];
return $options;
}