oont-contents/plugins/wp-rocket/inc/3rd-party/plugins/i18n/polylang.php
2025-02-08 15:10:23 +01:00

145 lines
4.7 KiB
PHP

<?php
defined( 'ABSPATH' ) || exit;
if ( defined( 'POLYLANG_VERSION' ) && POLYLANG_VERSION ) :
/**
* Conflict with Polylang: Clear the whole cache when the "The language is set from content" option is activated.
*
* @since 2.6.8
*/
function rocket_force_clean_domain_on_polylang() {
$pll = function_exists( 'PLL' ) ? PLL() : $GLOBALS['polylang'];
if ( isset( $pll ) && 0 === $pll->options['force_lang'] ) {
rocket_clean_cache_dir();
}
}
add_action( 'after_rocket_clean_domain', 'rocket_force_clean_domain_on_polylang' );
// Filter mandatory cookies and WP Rocket rewrite rules if Polylang module 'Detect browser language' is enabled.
if ( function_exists( 'PLL' ) && PLL()->options['browser'] ) {
// Add Polylang's language cookie as a mandatory cookie.
add_filter( 'rocket_cache_mandatory_cookies', 'rocket_add_polylang_mandatory_cookie' );
// Remove WP Rocket rewrite rules from .htaccess file.
add_filter( 'rocket_htaccess_mod_rewrite', '__return_false', 74 );
}
endif;
/**
* Add Polylang's language cookie to the mandatory cookies of WP Rocket.
*
* Polylang saves the users preferred language in this cookie by detecting browser language or by user choice
* Adding this as a mandatory cookie prevents WP Rocket from serving the cache when the cookie is not set.
*
* @param array $cookies Array with mandatory cookies.
* @return (array) Array of mandatory cookies with the Polylang cookie appended
*
* @author Arun Basil Lal
* @since 3.0.5
*/
function rocket_add_polylang_mandatory_cookie( $cookies ) {
$cookies[] = defined( 'PLL_COOKIE' ) ? PLL_COOKIE : 'pll_language';
return $cookies;
}
/**
* Add mandatory cookie to WP Rocket config and remove rewrite rules from .htaccess on Polylang activation.
*
* Add mandatory cookie only if the Polylang module 'Detect browser language' is active.
* Also purge the homepage cache.
*
* @author Arun Basil Lal
* @since 3.0.5
*/
function rocket_activate_polylang() {
// Read Polylang settings from db.
$polylang_settings = get_option( 'polylang' );
if ( isset( $polylang_settings['browser'] ) && ( 1 === (int) $polylang_settings['browser'] ) ) {
// Add Polylang's language cookie as a mandatory cookie.
add_filter( 'rocket_cache_mandatory_cookies', 'rocket_add_polylang_mandatory_cookie' );
// Remove WP Rocket rewrite rules from .htaccess file.
add_filter( 'rocket_htaccess_mod_rewrite', '__return_false', 74 );
// Regenerate the config file.
rocket_generate_config_file();
// Regenerate .htaccess file.
flush_rocket_htaccess();
// Purge homepage cache.
rocket_clean_home();
}
}
add_action( 'activate_polylang/polylang.php', 'rocket_activate_polylang', 11 );
/**
* Remove mandatory cookie and add rewrite rules back to .htaccess when Polylang is deactivated.
*
* @author Arun Basil Lal
* @since 3.0.5
*/
function rocket_deactivate_polylang() {
// Remove Polylang's language cookie as a mandatory cookie.
remove_filter( 'rocket_cache_mandatory_cookies', 'rocket_add_polylang_mandatory_cookie' );
// Add back WP Rocket rewrite rules from .htaccess file.
remove_filter( 'rocket_htaccess_mod_rewrite', '__return_false', 74 );
// Regenerate the config file.
rocket_generate_config_file();
// Regenerate .htaccess file.
flush_rocket_htaccess();
}
add_action( 'deactivate_polylang/polylang.php', 'rocket_deactivate_polylang', 11 );
/**
* Update mandatory cookie in WP Rocket config file and remove rewrite rules from .htaccess
* when Detect browser language module is enabled / disabled.
*
* @param array $value Array containing Polylang settings before its written to db.
* @return array
*
* @author Arun Basil Lal
* @since 3.0.5
*/
function rocket_detect_browser_language_status_change( $value ) {
if ( function_exists( 'PLL' ) && PLL()->options['browser'] ) {
// Add Polylang's language cookie as a mandatory cookie.
add_filter( 'rocket_cache_mandatory_cookies', 'rocket_add_polylang_mandatory_cookie' );
// Remove WP Rocket rewrite rules from .htaccess file.
add_filter( 'rocket_htaccess_mod_rewrite', '__return_false', 74 );
// Regenerate the config file.
rocket_generate_config_file();
// Regenerate .htaccess file.
flush_rocket_htaccess();
// Purge homepage cache.
rocket_clean_home();
} else {
// Remove Polylang's language cookie as a mandatory cookie.
remove_filter( 'rocket_cache_mandatory_cookies', 'rocket_add_polylang_mandatory_cookie' );
// Add back WP Rocket rewrite rules from .htaccess file.
remove_filter( 'rocket_htaccess_mod_rewrite', '__return_false', 74 );
// Regenerate the config file.
rocket_generate_config_file();
// Regenerate .htaccess file.
flush_rocket_htaccess();
}
return $value;
}
add_filter( 'pre_update_option_polylang', 'rocket_detect_browser_language_status_change' );