data = array(); $this->name = $name; $this->cache_to_option = $cache_to_option; $this->cache_needs_saving = false; if ($cache_to_option) { $this->data = icl_cache_get($name.'_cache_class'); if ($this->data == false){ $this->data = array(); } add_action( 'shutdown', array( $this, 'save_cache_if_required' ) ); } } function save_cache_if_required( ) { if( $this->cache_needs_saving ) { icl_cache_set($this->name.'_cache_class', $this->data); $this->cache_needs_saving = false; } } function get($key) { if(ICL_DISABLE_CACHE){ return null; } return isset($this->data[$key]) ? $this->data[$key] : false; } function has_key($key){ if(ICL_DISABLE_CACHE){ return false; } return array_key_exists($key, (array)$this->data); } function set($key, $value) { if(ICL_DISABLE_CACHE){ return; } if ($this->cache_to_option) { $old_value = null; if ( isset ( $this->data[$key] ) ) { $old_value = $this->data[$key]; } if ( $old_value !== $value ) { $this->data[$key] = $value; $this->cache_needs_saving = true; } } else { $this->data[$key] = $value; } } function clear() { $this->data = array(); if ($this->cache_to_option) { icl_cache_clear($this->name.'_cache_class'); } } } if ( ! function_exists( 'icl_disable_cache' ) ) { function icl_disable_cache() { return defined( 'ICL_DISABLE_CACHE' ) && ICL_DISABLE_CACHE; } } if ( ! function_exists( 'icl_cache_get' ) ) { function icl_cache_get( $key ) { $result = false; if ( ! icl_disable_cache() ) { $icl_cache = get_option( '_icl_cache' ); $result = isset( $icl_cache[ $key ] ) ? $icl_cache[ $key ] : false; } return $result; } } if ( ! function_exists( 'icl_cache_set' ) ) { function icl_cache_set( $key, $value = null ) { global $switched; if ( empty( $switched ) && ! icl_disable_cache() ) { $icl_cache = get_option( '_icl_cache' ); if ( false === $icl_cache ) { delete_option( '_icl_cache' ); } if ( ! isset( $icl_cache[ $key ] ) || $icl_cache[ $key ] != $value ) { if ( ! is_null( $value ) ) { $icl_cache[ $key ] = $value; } elseif ( isset( $icl_cache[ $key ] ) ) { unset( $icl_cache[ $key ] ); } update_option( '_icl_cache', $icl_cache ); } } } } if ( ! function_exists( 'icl_cache_clear' ) ) { function icl_cache_clear( $key = false, $key_as_prefix = false ) { if ( empty( $switched ) && ! icl_disable_cache() ) { /** * @var WPML_Term_Translation $wpml_term_translations * @var WPML_Post_Translation $wpml_post_translations */ global $wpml_term_translations, $wpml_post_translations; $wpml_term_translations->reload(); $wpml_post_translations->reload(); if ( $key === false ) { delete_option( '_icl_cache' ); } else { /** @var array $icl_cache */ $icl_cache = get_option( '_icl_cache' ); if ( is_array( $icl_cache ) ) { if ( isset( $icl_cache[ $key ] ) ) { unset( $icl_cache[ $key ] ); } if ( $key_as_prefix ) { $cache_keys = array_keys( $icl_cache ); foreach ( $cache_keys as $cache_key ) { if ( strpos( $cache_key, $key ) === 0 ) { unset( $icl_cache[ $key ] ); } } } // special cache of 'per language' - clear different statuses if ( false !== strpos( $key, '_per_language' ) ) { foreach ( $icl_cache as $k => $v ) { if ( false !== strpos( $k, $key . '#' ) ) { unset( $icl_cache[ $k ] ); } } } update_option( '_icl_cache', $icl_cache ); } } } do_action( 'wpml_cache_clear' ); } } function w3tc_translate_cache_key_filter( $key ) { global $sitepress; return $sitepress->get_current_language() . $key; }