'ids', 'post_type' => ['post', 'page', 'product', 'docs'], 'posts_per_page' => 80, 'post_status' => 'publish', 'orderby' => 'date', 'order' => 'DESC', 'has_password' => false, ]; $query = new \WP_Query($args); if($query->have_posts()){ $posts = $query->get_posts(); foreach($posts as $post_id){ $preload_urls[] = get_permalink($post_id); } } $query = null; $args = [ 'fields' => 'ids', 'post_type' => 'page', 'posts_per_page' => 10, 'post_status' => 'publish', 'orderby' => 'date', 'order' => 'DESC', 'has_password' => false ]; $query = new \WP_Query($args); if($query->have_posts()){ $posts = $query->get_posts(); foreach($posts as $post_id){ $preload_urls[] = get_permalink($post_id); } } $preload_urls = array_unique($preload_urls); $preload_urls = apply_filters('speedycache_preload_urls', $preload_urls); $preload_urls = array_unique($preload_urls); set_transient('speedycache_preload_transient', $preload_urls, HOUR_IN_SECONDS); wp_schedule_single_event(time(), 'speedycache_preload_split'); } static function cache(){ global $speedycache; $preload_urls = get_transient('speedycache_preload_transient'); $cache_urls = 0; if(empty($preload_urls) || !is_array($preload_urls)){ return; } foreach($preload_urls as $key => $url){ if($cache_urls >= 10){ break; } wp_remote_get($url, [ 'headers' => [ 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' ], 'timeout' => 0.01, 'blocking' => false, 'sslverify' => false, ]); // Preload mobile version too if(!empty($speedycache->options['mobile_theme'])){ wp_remote_get($url, [ 'headers' => [ 'User-Agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/114.0.5735.99 Mobile/15E148 Safari/604.1' ], 'timeout' => 0.01, 'blocking' => false, 'sslverify' => false, ]); } unset($preload_urls[$key]); // We remove from the list to be preloaded $cache_urls++; } if(empty($preload_urls)){ set_transient('speedycache_preload_transient', [], HOUR_IN_SECONDS); return; } wp_schedule_single_event(time() + 60, 'speedycache_preload_split'); set_transient('speedycache_preload_transient', $preload_urls, HOUR_IN_SECONDS); } // This will push a request to preload URLS // TODO: need to add a lock here static function url($urls){ if(!is_array($urls)){ $urls = [$urls]; } $preload_urls = get_transient('speedycache_preload_transient'); if(empty($preload_urls) || !is_array($preload_urls)){ $preload_urls = []; } $preload_urls = array_merge($preload_urls, $urls); $preload_urls = array_unique($preload_urls); set_transient('speedycache_preload_transient', $preload_urls, HOUR_IN_SECONDS); if(!wp_next_scheduled('speedycache_preload_split')){ wp_schedule_single_event(time() + 60, 'speedycache_preload_split'); } } static function wpml_urls($preload_urls){ $languages = apply_filters('wpml_active_languages', null, [ 'skip_missing' => 0, ]); if(empty($languages) || !is_array($languages)){ return $preload_urls; } // Getting Language URLs for Homepage foreach($languages as $language){ $lang_code = isset($language['language_code']) ? $language['language_code'] : $language['code']; $preload_urls[] = apply_filters('wpml_permalink', home_url('/'), $lang_code); } // Getting Language URLs for other pages foreach($preload_urls as $preload_url){ foreach($languages as $language){ $lang_code = isset($language['language_code']) ? $language['language_code'] : $language['code']; $translated_url = apply_filters('wpml_permalink', $preload_url, $lang_code, true); if(!empty($translated_url)){ $preload_urls[] = $translated_url; } } } return $preload_urls; } }