| Server IP : 195.130.67.5 / Your IP : 216.73.217.154 Web Server : Microsoft-IIS/10.0 System : Windows NT WEBSERVER1 10.0 build 17763 (Windows Server 2016) i586 User : IUSR ( 0) PHP Version : 7.4.19 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/inetpub/wwwroot/prosvasi/wp-content/plugins/polylang/src/modules/sitemaps/ |
Upload File : |
<?php
/**
* @package Polylang
*/
/**
* Handles the core sitemaps for sites using a single domain.
*
* @since 2.8
*/
class PLL_Sitemaps extends PLL_Abstract_Sitemaps {
/**
* @var PLL_Links_Model
*/
protected $links_model;
/**
* @var PLL_Model
*/
protected $model;
/**
* Stores the plugin options.
*
* @var \WP_Syntex\Polylang\Options\Options
*/
protected $options;
/**
* Constructor.
*
* @since 2.8
*
* @param PLL_Base $polylang Main Polylang object.
*/
public function __construct( PLL_Base &$polylang ) {
$this->links_model = &$polylang->links_model;
$this->model = &$polylang->model;
$this->options = $polylang->options;
}
/**
* Setups actions and filters.
*
* @since 2.8
*
* @return void
*/
public function init() {
parent::init();
add_filter( 'pll_set_language_from_query', array( $this, 'set_language_from_query' ), 10, 2 );
add_filter( 'rewrite_rules_array', array( $this, 'rewrite_rules' ) );
add_filter( 'wp_sitemaps_add_provider', array( $this, 'replace_provider' ) );
}
/**
* Assigns the current language to the default language when the sitemap url
* doesn't include any language.
*
* @since 2.8
* @since 3.8 Returns a language object instead of a language slug.
*
* @param PLL_Language|false $lang Current language code, false if not set yet.
* @param WP_Query $query Main WP query object.
* @return PLL_Language|false
*/
public function set_language_from_query( $lang, $query ) {
if ( isset( $query->query['sitemap'] ) && empty( $query->query['lang'] ) ) {
return $this->model->languages->get_default();
}
return $lang;
}
/**
* Filters the sitemaps rewrite rules to take the languages into account.
*
* @since 2.8
*
* @param string[] $rules Rewrite rules.
* @return string[] Modified rewrite rules.
*/
public function rewrite_rules( $rules ) {
global $wp_rewrite;
$languages = $this->model->languages
->filter( $this->options['hide_default'] ? 'hide_default' : '' )
->get_list( array( 'fields' => 'slug' ) );
if ( empty( $languages ) ) {
return $rules;
}
$slug = $wp_rewrite->root . ( $this->options['rewrite'] ? '^' : '^language/' ) . '(' . implode( '|', $languages ) . ')/';
$newrules = array();
foreach ( $rules as $key => $rule ) {
if ( false !== strpos( $rule, 'sitemap=$matches[1]' ) ) {
$newrules[ str_replace( '^wp-sitemap', $slug . 'wp-sitemap', $key ) ] = str_replace(
array( '[8]', '[7]', '[6]', '[5]', '[4]', '[3]', '[2]', '[1]', '?' ),
array( '[9]', '[8]', '[7]', '[6]', '[5]', '[4]', '[3]', '[2]', '?lang=$matches[1]&' ),
$rule
); // Should be enough!
}
$newrules[ $key ] = $rule;
}
return $newrules;
}
/**
* Replaces a sitemap provider by our decorator.
*
* @since 2.8
*
* @param WP_Sitemaps_Provider $provider Instance of a WP_Sitemaps_Provider.
* @return WP_Sitemaps_Provider
*/
public function replace_provider( $provider ) {
if ( $provider instanceof WP_Sitemaps_Provider ) {
$provider = new PLL_Multilingual_Sitemaps_Provider( $provider, $this->links_model );
}
return $provider;
}
}