Merge pull request #25 from plescheff/master
Implemented new invalidation method; added filter hook.
This commit is contained in:
commit
815cf8e045
2 changed files with 74 additions and 13 deletions
|
@ -85,6 +85,27 @@ class WP_FFPC_Backend {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static function parse_urimap($uri, $default_urimap=null) {
|
||||||
|
$uri_parts = parse_url( $uri );
|
||||||
|
|
||||||
|
$uri_map = array(
|
||||||
|
'$scheme' => $uri_parts['scheme'],
|
||||||
|
'$host' => $uri_parts['host'],
|
||||||
|
'$request_uri' => $uri_parts['path']
|
||||||
|
);
|
||||||
|
|
||||||
|
if (is_array($default_urimap)) {
|
||||||
|
$uri_map = array_merge($default_urimap, $uri_map);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $uri_map;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function map_urimap($urimap, $subject) {
|
||||||
|
return str_replace(array_keys($urimap), $urimap, $subject);
|
||||||
|
}
|
||||||
|
|
||||||
/*********************** PUBLIC / PROXY FUNCTIONS ***********************/
|
/*********************** PUBLIC / PROXY FUNCTIONS ***********************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -95,7 +116,7 @@ class WP_FFPC_Backend {
|
||||||
*/
|
*/
|
||||||
public function key ( &$prefix ) {
|
public function key ( &$prefix ) {
|
||||||
/* data is string only with content, meta is not used in nginx */
|
/* data is string only with content, meta is not used in nginx */
|
||||||
$key = $prefix . str_replace ( array_keys( $this->urimap ), $this->urimap, $this->options['key'] );
|
$key = $prefix . self::map_urimap($this->urimap, $this->options['key']);
|
||||||
$this->log ( sprintf( __translate__( 'original key configuration: %s', $this->plugin_constant ), $this->options['key'] ) );
|
$this->log ( sprintf( __translate__( 'original key configuration: %s', $this->plugin_constant ), $this->options['key'] ) );
|
||||||
$this->log ( sprintf( __translate__( 'setting key to: %s', $this->plugin_constant ), $key ) );
|
$this->log ( sprintf( __translate__( 'setting key to: %s', $this->plugin_constant ), $key ) );
|
||||||
return $key;
|
return $key;
|
||||||
|
@ -200,6 +221,17 @@ class WP_FFPC_Backend {
|
||||||
$this->taxonomy_links( $to_clear );
|
$this->taxonomy_links( $to_clear );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* clear pasts index page if settings requires it */
|
||||||
|
if ( $this->options['invalidation_method'] == 3 ) {
|
||||||
|
$posts_page_id = get_option( 'page_for_posts' );
|
||||||
|
$post_type = get_post_type( $post_id );
|
||||||
|
|
||||||
|
if ($post_type === 'post' && $posts_page_id != $post_id) {
|
||||||
|
$this->clear($posts_page_id, $force);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* if there's a post id pushed, it needs to be invalidated in all cases */
|
/* if there's a post id pushed, it needs to be invalidated in all cases */
|
||||||
if ( !empty ( $post_id ) ) {
|
if ( !empty ( $post_id ) ) {
|
||||||
|
|
||||||
|
@ -207,26 +239,41 @@ class WP_FFPC_Backend {
|
||||||
if ( !function_exists('get_permalink') )
|
if ( !function_exists('get_permalink') )
|
||||||
include_once ( ABSPATH . 'wp-includes/link-template.php' );
|
include_once ( ABSPATH . 'wp-includes/link-template.php' );
|
||||||
|
|
||||||
/* get path from permalink */
|
/* get permalink */
|
||||||
$path = substr ( get_permalink( $post_id ) , 7 );
|
$permalink = get_permalink( $post_id );
|
||||||
|
|
||||||
/* no path, don't do anything */
|
/* no path, don't do anything */
|
||||||
if ( empty( $path ) ) {
|
if ( empty( $permalink ) ) {
|
||||||
$this->log ( sprintf( __translate__( 'unable to determine path from Post Permalink, post ID: %s', $this->plugin_constant ), $post_id ), LOG_WARNING );
|
$this->log ( sprintf( __translate__( 'unable to determine path from Post Permalink, post ID: %s', $this->plugin_constant ), $post_id ), LOG_WARNING );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isset($_SERVER['HTTPS']) && ( ( strtolower($_SERVER['HTTPS']) == 'on' ) || ( $_SERVER['HTTPS'] == '1' ) ) )
|
/*
|
||||||
$protocol = 'https://';
|
* It is possible that post/page is paginated with <!--nextpage-->
|
||||||
else
|
* Wordpress doesn't seem to expose the number of pages via API.
|
||||||
$protocol = 'http://';
|
* So let's just count it.
|
||||||
|
*/
|
||||||
|
$content_post = get_post( $post_id );
|
||||||
|
$content = $content_post->post_content;
|
||||||
|
$number_of_pages = 1 + (int)preg_match_all('/<!--nextpage-->/', $content, $matches);
|
||||||
|
|
||||||
/* elements to clear
|
$current_page_id = '';
|
||||||
values are keys, faster to process and eliminates duplicates
|
do {
|
||||||
*/
|
/* urimap */
|
||||||
$to_clear[ $protocol . $path ] = true;
|
$urimap = self::parse_urimap($permalink, $this->urimap);
|
||||||
|
$urimap['$request_uri'] = $urimap['$request_uri'] . ($current_page_id ? $current_page_id . '/' : '');
|
||||||
|
|
||||||
|
$clear_cache_key = self::map_urimap($urimap, $this->options['key']);
|
||||||
|
|
||||||
|
$to_clear[ $clear_cache_key ] = true;
|
||||||
|
|
||||||
|
$current_page_id = 1+(int)$current_page_id;
|
||||||
|
} while ($number_of_pages>1 && $current_page_id<=$number_of_pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Hook to custom clearing array. */
|
||||||
|
$to_clear = apply_filters('wp_ffpc_to_clear_array', $to_clear, $post_id);
|
||||||
|
|
||||||
foreach ( $to_clear as $link => $dummy ) {
|
foreach ( $to_clear as $link => $dummy ) {
|
||||||
/* clear all feeds as well */
|
/* clear all feeds as well */
|
||||||
$to_clear[ $link. 'feed' ] = true;
|
$to_clear[ $link. 'feed' ] = true;
|
||||||
|
|
|
@ -140,6 +140,7 @@ class WP_FFPC extends PluginAbstract {
|
||||||
0 => __( 'flush cache' , $this->plugin_constant ),
|
0 => __( 'flush cache' , $this->plugin_constant ),
|
||||||
1 => __( 'only modified post' , $this->plugin_constant ),
|
1 => __( 'only modified post' , $this->plugin_constant ),
|
||||||
2 => __( 'modified post and all taxonomies' , $this->plugin_constant ),
|
2 => __( 'modified post and all taxonomies' , $this->plugin_constant ),
|
||||||
|
3 => __( 'modified post and posts index page' , $this->plugin_constant ),
|
||||||
);
|
);
|
||||||
|
|
||||||
/* map of possible key masks */
|
/* map of possible key masks */
|
||||||
|
@ -483,7 +484,20 @@ class WP_FFPC extends PluginAbstract {
|
||||||
<select name="invalidation_method" id="invalidation_method">
|
<select name="invalidation_method" id="invalidation_method">
|
||||||
<?php $this->print_select_options ( $this->select_invalidation_method , $this->options['invalidation_method'] ) ?>
|
<?php $this->print_select_options ( $this->select_invalidation_method , $this->options['invalidation_method'] ) ?>
|
||||||
</select>
|
</select>
|
||||||
<span class="description"><?php _e('Select cache invalidation method. <ol><li><em>flush cache</em> - clears everything in storage, <strong>including values set by other applications</strong></li><li><em>only modified post</em> - clear only the modified posts entry, everything else remains in cache</li><li><em>modified post and all taxonomies</em> - removes all taxonomy term cache ( categories, tags, home, etc ) and the modified post as well</li></ol>', $this->plugin_constant); ?></span>
|
<div class="description"><?php _e('Select cache invalidation method.', $this->plugin_constant); ?>
|
||||||
|
<ol>
|
||||||
|
<?php
|
||||||
|
$invalidation_method_description = array(
|
||||||
|
'clears everything in storage, <strong>including values set by other applications</strong>',
|
||||||
|
'clear only the modified posts entry, everything else remains in cache',
|
||||||
|
'removes all taxonomy term cache ( categories, tags, home, etc ) and the modified post as well<br><strong>Caution! Slows down page/post saving when there are many tags.</strong>',
|
||||||
|
'clear cache for modified post and posts index page'
|
||||||
|
);
|
||||||
|
foreach ($this->select_invalidation_method AS $current_key => $current_invalidation_method) {
|
||||||
|
printf('<li><em>%1$s</em> - %2$s</li>', $current_invalidation_method, $invalidation_method_description[$current_key]);
|
||||||
|
} ?>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt>
|
<dt>
|
||||||
|
|
Loading…
Reference in a new issue