File "purge.php"
Full path: /home/kosmetik/public_html/wp-content/plugins/wp-rocket/inc/common/purge.php
File
size: 13.36 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
defined('ABSPATH') || exit;
add_action('switch_theme', 'rocket_clean_domain');
add_action('wp_update_nav_menu', 'rocket_clean_domain');
add_action('update_option_sidebars_widgets', 'rocket_clean_domain');
add_action('update_option_category_base', 'rocket_clean_domain');
add_action('update_option_tag_base', 'rocket_clean_domain');
add_action('permalink_structure_changed', 'rocket_clean_domain');
add_action('add_link', 'rocket_clean_domain');
add_action('edit_link', 'rocket_clean_domain');
add_action('delete_link', 'rocket_clean_domain');
add_action('customize_save', 'rocket_clean_domain');
add_action('update_option_theme_mods_' . get_option('stylesheet'), 'rocket_clean_domain');
function rocket_widget_update_callback($instance)
{
rocket_clean_domain();
return $instance;
}
add_filter('widget_update_callback', 'rocket_widget_update_callback');
function rocket_get_purge_urls($post_id, $post)
{
$purge_urls = [];
$permalink_structure = get_rocket_sample_permalink($post_id);
$permalink = str_replace(['%postname%', '%pagename%'], $permalink_structure[1], $permalink_structure[0]);
if (rocket_extract_url_component($permalink, PHP_URL_PATH) !== '/') {
$purge_urls[] = $permalink;
}
if ('post' === $post->post_type && (int) get_option('page_for_posts') > 0) {
$purge_urls[] = get_permalink(get_option('page_for_posts'));
}
$post_type = $post->post_type;
if ('post' !== $post_type) {
$post_type_archive = get_post_type_archive_link($post_type);
if ($post_type_archive) {
$filename = 'index';
if (is_ssl()) {
$filename .= '-https';
}
$post_type_archive = trailingslashit($post_type_archive);
$purge_urls[] = $post_type_archive . $filename . '.html';
$purge_urls[] = $post_type_archive . $filename . '.html_gzip';
$purge_urls[] = $post_type_archive . $filename . $GLOBALS['wp_rewrite']->pagination_base;
}
}
$next_post = get_adjacent_post(false, '', false);
if ($next_post) {
$purge_urls[] = get_permalink($next_post);
}
$next_in_same_cat_post = get_adjacent_post(true, '', false);
if ($next_in_same_cat_post && $next_in_same_cat_post !== $next_post) {
$purge_urls[] = get_permalink($next_in_same_cat_post);
}
$previous_post = get_adjacent_post(false, '', true);
if ($previous_post) {
$purge_urls[] = get_permalink($previous_post);
}
$previous_in_same_cat_post = get_adjacent_post(true, '', true);
if ($previous_in_same_cat_post && $previous_in_same_cat_post !== $previous_post) {
$purge_urls[] = get_permalink($previous_in_same_cat_post);
}
$cache_purge_pages = get_rocket_option('cache_purge_pages');
if ($cache_purge_pages) {
global $blog_id;
$home_url = get_option('home');
if (!empty($blog_id) && is_multisite()) {
switch_to_blog($blog_id);
$home_url = get_option('home');
restore_current_blog();
}
$home_parts = get_rocket_parse_url($home_url);
$home_url = "{$home_parts['scheme']}://{$home_parts['host']}";
$cache_path = rocket_get_constant('WP_ROCKET_CACHE_PATH') . $home_parts['host'];
foreach ($cache_purge_pages as $page) {
if (strstr($page, '*')) {
$matches_files = _rocket_get_recursive_dir_files_by_regex('#' . $page . '#i');
foreach ($matches_files as $file) {
$purge_urls[] = str_replace($cache_path, untrailingslashit($home_url), $file->getPath());
}
continue;
}
$purge_urls[] = trailingslashit($home_url) . $page;
}
}
$purge_urls[] = get_author_posts_url($post->post_author);
$parents = get_post_ancestors($post_id);
if ((bool) $parents) {
foreach ($parents as $parent_id) {
$purge_urls[] = get_permalink($parent_id);
}
}
$purge_urls = array_filter($purge_urls, 'is_string');
return array_flip(array_flip($purge_urls));
}
function rocket_clean_post($post_id, $post = null)
{
static $done = array();
if (isset($done[$post_id])) {
return false;
}
$done[$post_id] = 1;
if (defined('DOING_AUTOSAVE')) {
return false;
}
$purge_urls = [];
if (is_null($post)) {
$post = get_post($post_id);
}
if (!is_object($post)) {
return false;
}
if ('auto-draft' === $post->post_status || 'draft' === $post->post_status || empty($post->post_type) || 'nav_menu_item' === $post->post_type || 'attachment' === $post->post_type) {
return false;
}
$post_type = get_post_type_object($post->post_type);
if (!is_object($post_type) || true !== $post_type->public) {
return false;
}
$i18n_plugin = rocket_has_i18n();
$lang = false;
if ('wpml' === $i18n_plugin && !rocket_is_plugin_active('woocommerce-multilingual/wpml-woocommerce.php')) {
$lang = $GLOBALS['sitepress']->get_language_for_element($post_id, 'post_' . get_post_type($post_id));
} elseif ('polylang' === $i18n_plugin && function_exists('pll_get_post_language')) {
$lang = pll_get_post_language($post_id);
}
$purge_urls = rocket_get_purge_urls($post_id, $post);
do_action('before_rocket_clean_post', $post, $purge_urls, $lang);
$purge_urls = apply_filters('rocket_post_purge_urls', $purge_urls, $post);
rocket_clean_files($purge_urls);
rocket_clean_home($lang);
rocket_clean_home_feeds();
do_action('after_rocket_clean_post', $post, $purge_urls, $lang);
return true;
}
add_action('wp_trash_post', 'rocket_clean_post');
add_action('delete_post', 'rocket_clean_post');
add_action('clean_post_cache', 'rocket_clean_post');
add_action('wp_update_comment_count', 'rocket_clean_post');
function rocket_clean_post_cache_on_status_change($post_id, $post_data)
{
if ('publish' !== get_post_field('post_status', $post_id) || 'draft' !== $post_data['post_status']) {
return;
}
$purge_urls = [];
$post = get_post($post_id);
if (!is_object($post)) {
return;
}
$i18n_plugin = rocket_has_i18n();
$lang = false;
if ('wpml' === $i18n_plugin && !rocket_is_plugin_active('woocommerce-multilingual/wpml-woocommerce.php')) {
$lang = $GLOBALS['sitepress']->get_language_for_element($post_id, 'post_' . get_post_type($post_id));
} elseif ('polylang' === $i18n_plugin && function_exists('pll_get_post_language')) {
$lang = pll_get_post_language($post_id);
}
$purge_urls = rocket_get_purge_urls($post_id, $post);
$purge_urls = apply_filters('rocket_post_purge_urls', $purge_urls, $post);
do_action('before_rocket_clean_post', $post, $purge_urls, $lang);
rocket_clean_files($purge_urls);
rocket_clean_home($lang);
rocket_clean_home_feeds();
do_action('after_rocket_clean_post', $post, $purge_urls, $lang);
}
add_action('pre_post_update', 'rocket_clean_post_cache_on_status_change', 10, 2);
function rocket_clean_files_users($urls)
{
$pattern_urls = [];
foreach ($urls as $url) {
$parse_url = get_rocket_parse_url($url);
$pattern_urls[] = $parse_url['scheme'] . '://' . $parse_url['host'] . '*' . $parse_url['path'];
}
return $pattern_urls;
}
add_filter('rocket_clean_files', 'rocket_clean_files_users');
function rocket_post_purge_urls_for_qtranslate($urls)
{
global $q_config;
if (!$urls) {
return [];
}
$i18n_plugin = rocket_has_i18n();
if ('qtranslate' !== $i18n_plugin && 'qtranslate-x' !== $i18n_plugin) {
return $urls;
}
$enabled_languages = $q_config['enabled_languages'];
$enabled_languages = array_diff($enabled_languages, [$q_config['default_language']]);
foreach ($urls as $url) {
foreach ($enabled_languages as $lang) {
if ('qtranslate' === $i18n_plugin) {
$urls[] = qtrans_convertURL($url, $lang, true);
} elseif ('qtranslate-x' === $i18n_plugin) {
$urls[] = qtranxf_convertURL($url, $lang, true);
}
}
}
return $urls;
}
add_filter('rocket_post_purge_urls', 'rocket_post_purge_urls_for_qtranslate');
function do_admin_post_rocket_purge_cache()
{
if (isset($_GET['type'], $_GET['_wpnonce'])) {
$type_raw = sanitize_key($_GET['type']);
$type_array = explode('-', $type_raw);
$type = $type_array[0];
$id = isset($type_array[1]) && is_numeric($type_array[1]) ? absint($type_array[1]) : 0;
$taxonomy = isset($_GET['taxonomy']) ? sanitize_title(wp_unslash($_GET['taxonomy'])) : '';
$url = '';
if (!wp_verify_nonce(sanitize_key($_GET['_wpnonce']), 'purge_cache_' . $type_raw)) {
wp_nonce_ays('');
return;
}
if (!current_user_can('rocket_purge_cache')) {
return;
}
switch ($type) {
case 'all':
set_transient('rocket_clear_cache', 'all', HOUR_IN_SECONDS);
$lang = isset($_GET['lang']) && 'all' !== $_GET['lang'] ? sanitize_key($_GET['lang']) : '';
rocket_clean_domain($lang);
if ('' === $lang) {
rocket_clean_minify();
$options = get_option(WP_ROCKET_SLUG);
$options['minify_css_key'] = create_rocket_uniqid();
$options['minify_js_key'] = create_rocket_uniqid();
remove_all_filters('update_option_' . WP_ROCKET_SLUG);
update_option(WP_ROCKET_SLUG, $options);
}
if (get_rocket_option('manual_preload') && (!defined('WP_ROCKET_DEBUG') || !WP_ROCKET_DEBUG)) {
$home_url = get_rocket_i18n_home_url($lang);
$args = (array) apply_filters('rocket_preload_after_purge_cache_request_args', ['blocking' => false, 'timeout' => 0.01, 'user-agent' => 'WP Rocket/Homepage_Preload_After_Purge_Cache', 'sslverify' => apply_filters('https_local_ssl_verify', false)]);
wp_safe_remote_get($home_url, $args);
do_action('rocket_after_preload_after_purge_cache', $home_url, $lang, $args);
}
rocket_dismiss_box('rocket_warning_plugin_modification');
break;
case 'post':
rocket_clean_post($id);
set_transient('rocket_clear_cache', 'post', HOUR_IN_SECONDS);
break;
case 'term':
rocket_clean_term($id, $taxonomy);
set_transient('rocket_clear_cache', 'term', HOUR_IN_SECONDS);
break;
case 'user':
rocket_clean_user($id);
set_transient('rocket_clear_cache', 'user', HOUR_IN_SECONDS);
break;
case 'url':
$url = wp_get_referer();
if (0 !== strpos($url, 'http')) {
$parse_url = get_rocket_parse_url(untrailingslashit(home_url()));
$url = $parse_url['scheme'] . '://' . $parse_url['host'] . $url;
}
if (home_url('/') === $url) {
rocket_clean_home();
} else {
rocket_clean_files($url);
}
break;
default:
wp_nonce_ays('');
return;
}
do_action('rocket_purge_cache', $type, $id, $taxonomy, $url);
wp_safe_redirect(esc_url_raw(wp_get_referer()));
rocket_get_constant('WP_ROCKET_IS_TESTING', false) ? wp_die() : exit;
}
}
add_action('admin_post_purge_cache', 'do_admin_post_rocket_purge_cache');
function do_admin_post_rocket_purge_opcache()
{
if (!isset($_GET['_wpnonce']) || !wp_verify_nonce(sanitize_key($_GET['_wpnonce']), 'rocket_purge_opcache')) {
wp_nonce_ays('');
}
if (!current_user_can('rocket_purge_opcache')) {
return;
}
$reset_opcache = rocket_reset_opcache();
if (!$reset_opcache) {
$op_purge_result = ['result' => 'error', 'message' => __('OPcache purge failed.', 'rocket')];
} else {
$op_purge_result = ['result' => 'success', 'message' => __('OPcache successfully purged', 'rocket')];
}
set_transient(get_current_user_id() . '_opcache_purge_result', $op_purge_result);
wp_safe_redirect(esc_url_raw(wp_get_referer()));
die;
}
add_action('admin_post_rocket_purge_opcache', 'do_admin_post_rocket_purge_opcache');
function rocket_clean_cache_theme_update($wp_upgrader, $hook_extra)
{
if ('update' !== $hook_extra['action']) {
return;
}
if ('theme' !== $hook_extra['type']) {
return;
}
if (!is_array($hook_extra['themes'])) {
return;
}
$current_theme = wp_get_theme();
$themes = [$current_theme->get_template(), $current_theme->get_stylesheet()];
if (empty(array_intersect($hook_extra['themes'], $themes))) {
return;
}
rocket_clean_domain();
}
add_action('upgrader_process_complete', 'rocket_clean_cache_theme_update', 10, 2);
function rocket_clean_post_cache_on_slug_change($post_id, $post_data)
{
if (in_array(get_post_field('post_status', $post_id), ['draft', 'pending', 'auto-draft'], true)) {
return;
}
$post_name = get_post_field('post_name', $post_id);
if ($post_name === $post_data['post_name']) {
return;
}
if (empty($post_name)) {
return;
}
rocket_clean_files(get_the_permalink($post_id));
}
add_action('pre_post_update', 'rocket_clean_post_cache_on_slug_change', PHP_INT_MAX, 2);