<?php
defined('ABSPATH') || exit;
use WP_Rocket\Engine\Preload\FullProcess;
use WP_Rocket\Engine\Preload\Homepage;
use WP_Rocket\Engine\Preload\Sitemap;
function run_rocket_bot($spider = 'cache-preload', $lang = '')
{
if (!get_rocket_option('manual_preload')) {
return false;
}
$urls = [];
if (!$lang) {
$urls = get_rocket_i18n_uri();
} else {
$urls[] = get_rocket_i18n_home_url($lang);
}
$homepage_preload = new Homepage(new FullProcess());
$homepage_preload->preload($urls);
return true;
}
function run_rocket_sitemap_preload()
{
if (!get_rocket_option('sitemap_preload') || !get_rocket_option('manual_preload')) {
return;
}
$sitemaps = apply_filters('rocket_sitemap_preload_list', get_rocket_option('sitemaps', false));
$sitemaps = array_flip(array_flip($sitemaps));
if (!$sitemaps) {
return;
}
$sitemap_preload = new Sitemap(new FullProcess());
$sitemap_preload->run_preload($sitemaps);
}
function do_admin_post_rocket_preload_cache()
{
if (empty($_GET['_wpnonce'])) {
wp_safe_redirect(wp_get_referer());
die;
}
if (!wp_verify_nonce(sanitize_key($_GET['_wpnonce']), 'preload')) {
wp_nonce_ays('');
}
if (!current_user_can('rocket_preload_cache')) {
wp_safe_redirect(wp_get_referer());
die;
}
$prewarmup_stats = get_option('wp_rocket_prewarmup_stats');
if (get_rocket_option('remove_unused_css') && empty($prewarmup_stats['allow_optimization'])) {
wp_safe_redirect(wp_get_referer());
die;
}
$preload_process = new FullProcess();
if ($preload_process->is_process_running()) {
wp_safe_redirect(wp_get_referer());
die;
}
delete_transient('rocket_preload_errors');
$lang = isset($_GET['lang']) && 'all' !== $_GET['lang'] ? sanitize_key($_GET['lang']) : '';
run_rocket_bot('cache-preload', $lang);
run_rocket_sitemap_preload();
if (!strpos(wp_get_referer(), 'wprocket')) {
set_transient('rocket_preload_triggered', 1);
}
wp_safe_redirect(wp_get_referer());
die;
}
add_action('admin_post_nopriv_preload', 'do_admin_post_rocket_preload_cache');
add_action('admin_post_preload', 'do_admin_post_rocket_preload_cache');