예제 #1
0
<?php

/**
 * Plugin name: Spider-Cache
 * Plugin URI:  https://wordpress.org/plugins/wp-spider-cache/
 * Description: Fully rendered pages stored in & served from Memcached.
 * Version:     2.1.0
 */
// Exit if accessed directly
defined('ABSPATH') || exit;
// Required files
require_once WP_CONTENT_DIR . '/plugins/wp-spider-cache/includes/functions.php';
// Initialize the caches
if (!wp_skip_output_cache()) {
    wp_object_cache_init();
    wp_output_cache_init();
}
예제 #2
0
 /**
  * Clear a cached URL
  *
  * @since 2.3.0
  *
  * @param string $url
  *
  * @return boolean
  */
 public static function clean_url($url = '')
 {
     // Bail if no URL
     if (empty($url)) {
         return false;
     }
     // Bail if no persistent output cache
     if (!function_exists('wp_output_cache')) {
         return false;
     }
     // Normalize the URL
     if (0 === strpos($url, 'https://')) {
         $url = str_replace('https://', 'http://', $url);
     }
     if (0 !== strpos($url, 'http://')) {
         $url = 'http://' . $url;
     }
     $url_key = md5($url);
     // Get cache objects
     $output_cache = wp_output_cache_init();
     $object_cache = wp_object_cache_init();
     // Bail if either cache is missing
     if (empty($output_cache) || empty($object_cache)) {
         return;
     }
     wp_cache_add("{$url_key}_version", 0, $output_cache->group);
     $retval = wp_cache_incr("{$url_key}_version", 1, $output_cache->group);
     $output_cache_no_remote_group_key = array_search($output_cache->group, (array) $object_cache->no_remote_groups);
     // The *_version key needs to be replicated remotely, otherwise invalidation won't work.
     // The race condition here should be acceptable.
     if (false !== $output_cache_no_remote_group_key) {
         unset($object_cache->no_remote_groups[$output_cache_no_remote_group_key]);
         $retval = wp_cache_set("{$url_key}_version", $retval, $output_cache->group);
         $object_cache->no_remote_groups[$output_cache_no_remote_group_key] = $output_cache->group;
     }
     return $retval;
 }
예제 #3
0
/**
 * Returns the Output Cache Global.
 *
 * @since 2.1.0
 *
 * @global  WP_Spider_Cache_Output  $wp_output_cache   WordPress Output Cache
 * @return  object
 */
function wp_output_cache()
{
    if (!isset($GLOBALS['wp_output_cache'])) {
        wp_output_cache_init();
    }
    return $GLOBALS['wp_output_cache'];
}