242 lines
7.0 KiB
PHP
242 lines
7.0 KiB
PHP
<?php
|
|
|
|
use W3TC\Dispatcher;
|
|
|
|
if ( ! class_exists( 'PPW_Cache_Services' ) ) {
|
|
/**
|
|
* Class PPW_Free_Handle_Cache
|
|
*/
|
|
class PPW_Cache_Services {
|
|
|
|
public function __construct() {
|
|
if ( ! function_exists( 'is_plugin_active' ) ) {
|
|
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Handle cache for page/post have password type is role with Super Cache plugin
|
|
*
|
|
* @param $new_role_password
|
|
* @param $id
|
|
* @param $current_roles_password
|
|
* @param $current_global_passwords
|
|
* @deprecated
|
|
*/
|
|
function handle_cache_for_password_type_role_with_super_cache( $new_role_password, $id, $current_roles_password, $current_global_passwords ) {
|
|
if ( ! is_plugin_active( 'wp-super-cache/wp-cache.php' ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( ! empty( $new_role_password ) ) {
|
|
$uri = $this->get_uri_by_post_id( $id );
|
|
global $cache_rejected_uri;
|
|
if ( ! in_array( '/' . $uri, $cache_rejected_uri ) ) {
|
|
$this->add_page_post_to_list_not_cache_for_super_cache( $id, $uri, $cache_rejected_uri );
|
|
}
|
|
} else {
|
|
if ( ! empty( $current_global_passwords ) ) {
|
|
return;
|
|
}
|
|
|
|
$result = array_values( $current_roles_password );
|
|
$result = array_filter( $result, 'strlen' );
|
|
if ( empty( $result ) ) {
|
|
$this->remove_page_post_to_list_not_cache_for_super_cache( $id );
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Handle cache for page/post have password type is global with Super Cache plugin
|
|
*
|
|
* @param $new_global_passwords
|
|
* @param $id
|
|
* @param $current_roles_password
|
|
* @deprecated
|
|
*/
|
|
function handle_cache_for_password_type_global_with_super_cache( $new_global_passwords, $id, $current_roles_password ) {
|
|
if ( ! is_plugin_active( 'wp-super-cache/wp-cache.php' ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( ! empty( $new_global_passwords ) ) {
|
|
$uri = $this->get_uri_by_post_id( $id );
|
|
global $cache_rejected_uri;
|
|
if ( ! in_array( '/' . $uri, $cache_rejected_uri ) ) {
|
|
$this->add_page_post_to_list_not_cache_for_super_cache( $id, $uri, $cache_rejected_uri );
|
|
}
|
|
} else {
|
|
$result = array_values( $current_roles_password );
|
|
$result = array_filter( $result, 'strlen' );
|
|
if ( empty( $result ) ) {
|
|
$this->remove_page_post_to_list_not_cache_for_super_cache( $id );
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add page or post to list not cache of WP Super Cache plugin
|
|
*
|
|
* @param $post_id
|
|
* @param $uri
|
|
* @param $cache_rejected_uri
|
|
* @deprecated
|
|
*/
|
|
function add_page_post_to_list_not_cache_for_super_cache( $post_id, $uri, $cache_rejected_uri ) {
|
|
// 1. Add URI to list not cache
|
|
global $wp_cache_config_file;
|
|
array_push( $cache_rejected_uri, '/' . $uri );
|
|
$all_uri = array_map( function ( $key, $cache ) {
|
|
return " $key => '$cache'";
|
|
}, array_keys( $cache_rejected_uri ), $cache_rejected_uri );
|
|
$all_uri = implode( ',', $all_uri );
|
|
$text = "array($all_uri )";
|
|
wp_cache_replace_line( '^ *\$cache_rejected_uri', "\$cache_rejected_uri = $text;", $wp_cache_config_file );
|
|
|
|
// 3. Clear cache by post_id
|
|
wp_cache_post_edit( $post_id );
|
|
}
|
|
|
|
/**
|
|
* Remove page or post in list not cache of WP Super Cache plugin
|
|
*
|
|
* @param $post_id
|
|
* @deprecated
|
|
*/
|
|
function remove_page_post_to_list_not_cache_for_super_cache( $post_id ) {
|
|
// 1. Get URI in permalink by post_id
|
|
$uri = $this->get_uri_by_post_id( $post_id );
|
|
$uri = '/' . $uri;
|
|
|
|
// 2. Remove URI in list not cache
|
|
global $cache_rejected_uri, $wp_cache_config_file;
|
|
$cache_rejected_uri = array_unique( $cache_rejected_uri );
|
|
if ( ( $key = array_search( $uri, $cache_rejected_uri ) ) !== false ) {
|
|
unset( $cache_rejected_uri[ $key ] );
|
|
$all_uri = array_map( function ( $key, $cache ) {
|
|
return " $key => '$cache'";
|
|
}, array_keys( $cache_rejected_uri ), $cache_rejected_uri );
|
|
$all_uri = implode( ',', $all_uri );
|
|
$text = "array($all_uri )";
|
|
wp_cache_replace_line( '^ *\$cache_rejected_uri', "\$cache_rejected_uri = $text;", $wp_cache_config_file );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* get URI by post_id
|
|
*
|
|
* @param $post_id
|
|
*
|
|
* @return string
|
|
* @deprecated
|
|
*/
|
|
function get_uri_by_post_id( $post_id ) {
|
|
$permalink = get_permalink( $post_id );
|
|
$parse_url = parse_url( $permalink );
|
|
$uri = $parse_url['path'];
|
|
$uri = explode( '/', $uri );
|
|
$uri = ! empty( $uri[ count( $uri ) - 1 ] ) ? $uri[ count( $uri ) - 1 ] : $uri[ count( $uri ) - 2 ];
|
|
|
|
return $uri;
|
|
}
|
|
|
|
/**
|
|
* Clear cache all page
|
|
* @deprecated
|
|
*/
|
|
function clear_cache_super_cache() {
|
|
if ( ! is_plugin_active( 'wp-super-cache/wp-cache.php' ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( is_multisite() ) {
|
|
wp_cache_clear_cache( get_current_blog_id() );
|
|
} else {
|
|
wp_cache_clear_cache();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check W3 Total Cache has config cookie group
|
|
*
|
|
* @return bool
|
|
*/
|
|
function check_has_config_w3_total_cache() {
|
|
$config = Dispatcher::config();
|
|
$groups = $config->get_array( 'pgcache.cookiegroups.groups' );
|
|
if ( ! array_key_exists( 'password_protect_wordpress', $groups ) ) {
|
|
return false;
|
|
}
|
|
|
|
if ( ! $groups['password_protect_wordpress']['enabled'] || $groups['password_protect_wordpress']['cache'] ) {
|
|
return false;
|
|
}
|
|
|
|
$cookies = $groups['password_protect_wordpress']['cookies'];
|
|
|
|
return in_array( 'pda_protect_password', $cookies ) && in_array( 'wp-postpass-role_*', $cookies );
|
|
}
|
|
|
|
/**
|
|
* Update cookie to option and modify htaccess file for WP Fastest Cache plugin
|
|
* @deprecated
|
|
*/
|
|
function custom_option_exclude_page_and_cookie_fastest_cache() {
|
|
if ( ! is_plugin_active( 'wp-fastest-cache/wpFastestCache.php' ) ) {
|
|
return;
|
|
}
|
|
|
|
$old_fastest = get_option( "WpFastestCacheExclude" );
|
|
$fastest_cache = new WpFastestCache();
|
|
if ( $old_fastest ) {
|
|
$old_fastest = json_decode( $old_fastest );
|
|
$tmp1 = false;
|
|
$tmp2_free = false;
|
|
foreach ( $old_fastest as $fast ) {
|
|
if ( 'cookie' === $fast->type && 'contain' === $fast->prefix && 'pda_protect_password' === $fast->content ) {
|
|
$tmp1 = true;
|
|
}
|
|
if ( 'cookie' === $fast->type && 'contain' === $fast->prefix && 'wp-postpass-role_' === $fast->content ) {
|
|
$tmp2_free = true;
|
|
}
|
|
}
|
|
if ( ! $tmp1 ) {
|
|
array_push( $old_fastest, (object) array(
|
|
'prefix' => 'contain',
|
|
'content' => 'pda_protect_password',
|
|
'type' => 'cookie'
|
|
) );
|
|
}
|
|
if ( ! $tmp2_free ) {
|
|
array_push( $old_fastest, (object) array(
|
|
'prefix' => 'contain',
|
|
'content' => 'wp-goldpass-pagepost_',
|
|
'type' => 'cookie'
|
|
) );
|
|
}
|
|
|
|
update_option( "WpFastestCacheExclude", json_encode( $old_fastest ) );
|
|
$fastest_cache->modify_htaccess_for_exclude();
|
|
} else {
|
|
$ppwp_cookie = array(
|
|
(object) array(
|
|
'prefix' => 'contain',
|
|
'content' => 'pda_protect_password',
|
|
'type' => 'cookie'
|
|
)
|
|
);
|
|
|
|
array_push( $ppwp_cookie, (object) array(
|
|
'prefix' => 'contain',
|
|
'content' => 'wp-postpass-role_',
|
|
'type' => 'cookie'
|
|
) );
|
|
|
|
add_option( "WpFastestCacheExclude", json_encode( $ppwp_cookie ), null, "yes" );
|
|
$fastest_cache->modify_htaccess_for_exclude();
|
|
}
|
|
}
|
|
}
|
|
}
|