dir( $cache_dir ); if( ! is_dir( $cache_dir . DIRECTORY_SEPARATOR . 'tag' ) ) $this->mkdir( $cache_dir . DIRECTORY_SEPARATOR . 'tag' ); if( ! is_dir( $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'tag' ) ) $this->mkdir( $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'tag' ); if( ! is_dir( $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'url' ) ) $this->mkdir( $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'url' ); if( ! is_dir( $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'avatar' ) ) $this->mkdir( $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'avatar' ); if( ! is_dir( $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'reaction' ) ) $this->mkdir( $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'reaction' ); if( ! is_dir( $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'option' ) ) $this->mkdir( $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'option' ); $this->dir = $cache_dir; } ); if( apply_filters( 'wpforo_cache_by_usergroup', false ) ){ add_action( 'wpforo_after_init_current_user', function (){ $this->set_special_key(); } ); } add_action( 'wpforo_after_set_locale', function( $locale ) { $this->locale = $locale; $this->set_special_key(); } ); add_action( 'wpforo_after_add_board', function( $board ){ if( $board['status'] ){ WPF()->change_board( $board['boardid'] ); wpforo_clean_cache(); } } ); add_action( 'wpforo_after_edit_board', function( $boardid ){ $board = WPF()->board->_get_board( $boardid ); if( wpfval($board, 'status' ) ){ WPF()->change_board( $boardid ); wpforo_clean_cache(); } } ); add_action( 'wpforo_after_add_reaction', [ $this, 'after_add_reaction' ] ); add_action( 'wpforo_after_edit_reaction', [ $this, 'after_edit_reaction' ] ); add_action( 'wpforo_before_delete_reaction', [ $this, 'before_delete_reaction' ], 10, 2 ); add_action( 'wpforo_after_delete_reaction', [ $this, 'after_delete_reaction' ] ); } private function set_special_key(): void { $this->special_key = ( apply_filters( 'wpforo_cache_by_usergroup', false ) ? implode( '-', WPF()->current_user_groupids ) . '-' : '' ) . $this->locale; } public function get_key( $type = 'html' ) { if( $type === 'html' ) { $ug = WPF()->current_user_groupid; return md5( preg_replace( '#(.+)\#.+?$#is', '$1', (string) $_SERVER['REQUEST_URI'] ) . $ug ); } } private function dir( $cache_dir ) { $dirs = [ $cache_dir, $cache_dir . DIRECTORY_SEPARATOR . 'forum', $cache_dir . DIRECTORY_SEPARATOR . 'topic', $cache_dir . DIRECTORY_SEPARATOR . 'post', $cache_dir . DIRECTORY_SEPARATOR . 'tag', $cache_dir . DIRECTORY_SEPARATOR . 'item', $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'forum', $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'topic', $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'post', $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'tag', $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'url', $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'avatar', $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'reaction', $cache_dir . DIRECTORY_SEPARATOR . 'item' . DIRECTORY_SEPARATOR . 'option', ]; $this->mkdir( $dirs ); } private function mkdir( $dirs ) { foreach( (array) $dirs as $dir ) { wp_mkdir_p( $dir ); wpforo_write_file( $dir . '/index.html', '' ); wpforo_write_file( $dir . '/.htaccess', 'deny from all' ); } } public function on( $type = 'all' ){ if( $type !== 'all' ){ if( $type === 'forum' && !apply_filters( 'wpforo_cache_forum', true ) ) return false; if( $type === 'topic' && !apply_filters( 'wpforo_cache_topic', true ) ) return false; if( $type === 'post' && !apply_filters( 'wpforo_cache_post', true ) ) return false; if( $type === 'tag' && !apply_filters( 'wpforo_cache_tag', true ) ) return false; if( $type === 'url' && !apply_filters( 'wpforo_cache_url', true ) ) return false; if( $type === 'reaction' && !apply_filters( 'wpforo_cache_reaction', true ) ) return false; if( $type === 'avatar' && !apply_filters( 'wpforo_cache_avatar', true ) ) return false; if( $type === 'option' && !apply_filters( 'wpforo_cache_option', true ) ) return false; } return wpforo_setting( 'board', 'cache' ); } public function get( $key, $type = 'loop', $template = null ) { $template = ( $template ) ?: WPF()->current_object['template']; $loop_templates = [ 'forum', 'topic', 'post', 'tag' ]; if( $type === 'loop' && $template ) { if( $this->exists( $key, $template ) ) { if( in_array( $template, $loop_templates ) ) { $cache_file = $this->dir . '/' . $template . '/' . $key; $array = wpforo_get_file_content( $cache_file ); return @unserialize( $array ); } } } } public function get_item( $id, $type = 'post', $sub_type = '' ) { if( $id ) { $key = $id . '_' . $this->special_key; $domain_path = preg_replace('|https?://|i', '', get_site_url() ); if( $this->exists( $key, 'item', $type, $sub_type ) ) { $cache_file = $this->dir . '/item/' . $type . '/' . ( $sub_type ? $sub_type . '_' : '' ) . $key; $array = wpforo_get_file_content( $cache_file ); $data = @unserialize( $array ); if( $type === 'url' ) { // Always make sure the cached URLs are pointed to current website if( strpos( (string) $data, $domain_path ) === FALSE ) return null; } return $data; } } return null; } public function get_html() { $template = WPF()->current_object['template']; if( $template == 'forum' ) { $key = $this->get_key(); if( $this->exists( $key, $template ) ) { $cache_file = $this->dir . '/' . $template . '/' . $key; $html = wpforo_get_file_content( $cache_file ); return $this->filter( $html ); } } return false; } public function html( $content ) { /*$template = WPF()->current_object['template']; if( $template === 'forum' ){ $key = $this->get_key(); $this->create_html( $content, $template, $key ); }*/ } public function create( $mode = 'loop', $cache = [], $type = 'post' ) { if( ! $this->on() ) return false; $template = WPF()->current_object['template']; if( $template == 'forum' ) { $this->check( $this->dir . '/item/post' ); } if( $mode === 'loop' && $template ) { if( wpfval( $cache, 'tags' ) ) { $this->create_files( $cache['tags'], 'tag' ); } if( $template === 'forum' || $template === 'topic' || $template === 'post' ) { $cache = WPF()->forum->get_cache( 'forums' ); $this->create_files( $cache, $template ); $cache = WPF()->topic->get_cache( 'topics' ); $this->create_files( $cache, $template ); $cache = WPF()->post->get_cache( 'posts' ); $this->create_files( $cache, $template ); } } elseif( $mode === 'item' && ! empty( $cache ) ) { $this->create_files( $cache, 'item', $type ); } } public function create_files( $cache = [], $template = '', $type = '' ) { if( ! empty( $cache ) ) { $type = ( $type ) ? $type . '/' : ''; foreach( $cache as $key => $object ) { if( $template === 'item' ) $key = $key . '_' . $this->special_key; if( ! $this->exists( $key, $template ) ) { $object = serialize( $object ); wpforo_write_file( $this->dir . '/' . $template . '/' . $type . $key, $object ); } } } } public function create_html( $content, $template = '', $key = '' ) { if( $content ) { if( ! $this->exists( $key, $template ) ) { wpforo_write_file( $this->dir . '/' . $template . '/' . $key, $content ); } } } public function create_custom( $args = [], $items = [], $template = 'post', $items_count = 0 ) { if( empty( $args ) || ! is_array( $args ) ) return; if( empty( $items ) || ! is_array( $items ) ) return; $cache = []; $hach = serialize( $args ); $object_key = md5( $hach . WPF()->current_user_groupid ); $cache[ $object_key ]['items'] = $items; $cache[ $object_key ]['items_count'] = $items_count; $this->create_files( $cache, $template ); } public function filter( $html = '' ) { //exit(); $html = preg_replace( '|forum ) && method_exists(WPF()->forum, 'reset') ) WPF()->forum->reset(); if( isset( WPF()->topic ) && method_exists(WPF()->topic, 'reset') ) WPF()->topic->reset(); if( isset( WPF()->post ) && method_exists(WPF()->post, 'reset') ) WPF()->post->reset(); if( $template === 'forum' || $template === 'forum-soft' ) { $id = isset( $id ) ? $id : $forumid; if( $template === 'forum' ) { $dirs = [ $this->dir . '/forum', $this->dir . '/item/forum', $this->dir . '/item/url' ]; WPF()->seo->clear_cache(); } if( $template === 'forum-soft' ) { $dirs = [ $this->dir . '/forum' ]; } if( $id ) { $file = $this->dir . '/item/forum/' . $id . '_' . $this->special_key; $this->clean_file( $file ); } } elseif( $template === 'topic' || $template === 'topic-first-post' || $template === 'topic-soft' ) { $id = isset( $id ) ? $id : $topicid; if( $template === 'topic' || $template === 'topic-first-post' ) { WPF()->seo->clear_cache(); $dirs = [ $this->dir . '/forum', $this->dir . '/topic', $this->dir . '/post' ]; } if( $forumid ) { $file = $this->dir . '/item/forum/' . $forumid . '_' . $this->special_key; $this->clean_file( $file ); } if( $id ) { $file = $this->dir . '/item/topic/' . $id . '_' . $this->special_key; $this->clean_file( $file ); $file = $this->dir . '/item/url/topic_' . $id . '_' . $this->special_key; $this->clean_file( $file ); $postid = ( isset( $item['first_postid'] ) && $item['first_postid'] ) ? $item['first_postid'] : 0; if( $postid ) $file = $this->dir . '/item/post/' . $postid . '_' . $this->special_key; $this->clean_file( $file ); if( $template === 'topic' ) $this->clear_topic_posts_urls( $id ); } WPF()->statistic_cache_clean(); $this->clear_visitor_tracking(); } elseif( $template === 'post' || $template === 'post-soft' ) { $id = isset( $id ) ? $id : $postid; if( $template === 'post' ) { $dirs = [ $this->dir . '/forum', $this->dir . '/topic', $this->dir . '/post' ]; } if( $forumid ) { $file = $this->dir . '/item/forum/' . $forumid . '_' . $this->special_key; $this->clean_file( $file ); } if( $topicid ) { $file = $this->dir . '/item/topic/' . $topicid . '_' . $this->special_key; $this->clean_file( $file ); } if( $parentid ) { $file = $this->dir . '/item/post/' . $parentid . '_' . $this->special_key; $this->clean_file( $file ); } if( $root ) { $file = $this->dir . '/item/post/' . $root . '_' . $this->special_key; $this->clean_file( $file ); } if( $id ) { $file = $this->dir . '/item/post/' . $id . '_' . $this->special_key; $this->clean_file( $file ); $file = $this->dir . '/item/url/post_' . $id . '_' . $this->special_key; $this->clean_file( $file ); $this->clear_topic_next_posts_urls( $id, $topicid ); } WPF()->statistic_cache_clean(); $this->clear_visitor_tracking(); } elseif( $template === 'tag' ) { if( $id ) { $file = $this->dir . '/item/tag/' . md5( $id ) . '_' . $this->special_key; $this->clean_file( $file ); } else { $dirs = [ $this->dir . '/tag' ]; } } elseif( $template === 'option' ) { $dirs = [ $this->dir . '/item/option' ]; } elseif( $template === 'url' ) { $dirs = [ $this->dir . '/item/url' ]; } elseif( $template === 'avatar' ) { if( $id ){ $file = $this->dir . '/item/avatar/' . $id . '_' . $this->special_key; $this->clean_file( $file ); } else { $dirs = [ $this->dir . '/item/avatar' ]; } } elseif( $template === 'reaction' ) { if( $id ){ $file = $this->dir . '/item/reaction/' . $id . '_' . $this->special_key; $this->clean_file( $file ); $this->clean( $id, 'post' ); } else { $dirs = [ $this->dir . '/item/reaction' ]; } } elseif( $template === 'user' ) { if( wpforo_setting( 'seo', 'seo_profile' ) ) WPF()->seo->clear_cache(); } elseif( $template === 'loop' ) { $dirs = [ $this->dir . '/forum', $this->dir . '/topic', $this->dir . '/post' ]; WPF()->seo->clear_cache(); } elseif( $template === 'item' ) { $dirs = [ $this->dir . '/item/post', $this->dir . '/item/topic', $this->dir . '/item/forum' ]; WPF()->seo->clear_cache(); } else { $dirs = [ $this->dir . '/forum', $this->dir . '/topic', $this->dir . '/post', $this->dir . '/tag', $this->dir . '/item/post', $this->dir . '/item/topic', $this->dir . '/item/forum', $this->dir . '/item/tag', $this->dir . '/item/url', $this->dir . '/item/avatar', $this->dir . '/item/option', //$this->dir . '/item/reaction', ]; WPF()->seo->clear_cache(); } if( ! empty( $dirs ) ) { foreach( $dirs as $dir ) { $this->clean_files( $dir ); } } } public function clean_files( $directory ) { $directory = (string) $directory; $directory = wpforo_fix_dir_sep( $directory ); $directory_ns = trim( $directory, DIRECTORY_SEPARATOR ) . DIRECTORY_SEPARATOR . '*'; $directory_ws = DIRECTORY_SEPARATOR . trim( $directory, DIRECTORY_SEPARATOR ) . DIRECTORY_SEPARATOR . '*'; $glob = glob( $directory_ns ); if( empty( $glob ) ) $glob = glob( $directory_ws ); foreach( $glob as $item ) { if( strpos( (string) $item, 'index.html' ) !== false || strpos( (string) $item, '.htaccess' ) !== false ) continue; if( ! is_dir( $item ) && file_exists( $item ) ) { @unlink( $item ); } } } public function clean_file( $file ) { if( ! is_dir( $file ) && file_exists( $file ) ) { @unlink( $file ); } } public function clear_topic_posts_urls( $topicid ){ if( !$topicid ) return; $post_ids = WPF()->db->get_results("SELECT `postid` FROM " . WPF()->tables->posts . " WHERE `topicid` = " . intval( $topicid ), ARRAY_A ); if( !empty( $post_ids ) ){ foreach( $post_ids as $post_id ){ $this->clean_file( $this->dir . '/item/post/' . $post_id['postid'] . '_' . $this->special_key ); $this->clean_file( $this->dir . '/item/url/post_' . $post_id['postid'] . '_' . $this->special_key ); } } } public function clear_topic_next_posts_urls( $postid, $topicid ){ $topicid = ( $topicid ) ? : wpforo_post( $postid, 'topicid' ); $post_ids = WPF()->db->get_results("SELECT `postid` FROM " . WPF()->tables->posts . " WHERE `topicid` = " . intval( $topicid ) . " AND `postid` > " . intval( $postid ), ARRAY_A ); if( !empty( $post_ids ) ){ foreach( $post_ids as $post_id ){ $this->clean_file( $this->dir . '/item/post/' . $post_id['postid'] . '_' . $this->special_key ); $this->clean_file( $this->dir . '/item/url/post_' . $post_id['postid'] . '_' . $this->special_key ); } } } public function exists( $key, $template, $type = '', $sub_type = '' ) { $type = ( $type ) ? $type . '/' : ''; if( file_exists( $this->dir . '/' . $template . '/' . $type . ( $sub_type ? $sub_type . '_' : '' ) . $key ) ) { return true; } else { return false; } } public function check( $directory ) { $directory = (string) $directory; $directory = wpforo_fix_dir_sep( $directory ); $filecount = 0; if( class_exists( 'FilesystemIterator' ) && is_dir( $directory ) ) { $fi = new FilesystemIterator( $directory, FilesystemIterator::SKIP_DOTS ); $filecount = iterator_count( $fi ); } if( ! $filecount ) { $directory_ns = trim( $directory, DIRECTORY_SEPARATOR ) . DIRECTORY_SEPARATOR . '*'; $directory_ws = DIRECTORY_SEPARATOR . trim( $directory, DIRECTORY_SEPARATOR ) . DIRECTORY_SEPARATOR . '*'; $files = glob( $directory_ns ); if( empty( $files ) ) $files = glob( $directory_ws ); $filecount = count( $files ); } if( $filecount > 1000 ) { $this->clean_files( $directory ); } } public function clear_visitor_tracking() { $keep_vistors_data = apply_filters( 'wpforo_keep_visitors_data', 4000 ); $time = (int) time() - (int) $keep_vistors_data; $online = (int) time() - (int) wpforo_setting( 'profiles', 'online_status_timeout' ); if( $time > 1 ) { WPF()->db->query( "DELETE FROM `" . WPF()->tables->visits . "` WHERE `time` < " . intval( $time ) . " OR (`time` < " . intval( $online ) . " AND `userid` = 0)" ); } } public function cache_plugins(){ $board_paths = []; $cache_plugins = []; if( is_wpforo_multiboard() ){ $boards = WPF()->board->get_boards(); if(!empty($boards)){ foreach($boards as $board){ $board_paths[] = '/' . $board['slug'] . '/'; } } } else { $board_paths[] = '/' . WPF()->board->get_current( 'slug' ) . '/'; } $board_paths[] = '/' . wpforo_settings_get_slug('member') . '/'; $board_paths[] = '/' . wpforo_settings_get_slug('register') . '/'; $board_paths[] = '/' . wpforo_settings_get_slug('login') . '/'; $board_paths[] = '/' . wpforo_settings_get_slug('lostpassword') . '/'; if (function_exists("wpsc_init")) { //WP Super Cache $cache_plugins['WPSuper']['name'] = 'WP Super Cache'; $cache_plugins['WPSuper']['steps'][] = __('Please navigate in Dashboard to Settings > WP Super Cache', 'wpforo'); $cache_plugins['WPSuper']['steps'][] = __('Go to Advanced Tab, scroll down to "Rejected URL Strings" option', 'wpforo'); $cache_plugins['WPSuper']['steps'][] = __('Insert the URL path(s) of your forum page(s) one per line in the option textarea:', 'wpforo') . '
' . implode('
', $board_paths) . ''; $cache_plugins['WPSuper']['steps'][] = __('Save it and delete all caches.', 'wpforo'); } if (defined("LSCWP_V")) { //LiteSpeed Cache $cache_plugins['LiteSpeed']['name'] = 'LiteSpeed Cache'; $cache_plugins['LiteSpeed']['steps'][] = __('Please navigate in Dashboard to LiteSpeed Cache > Cache admin page', 'wpforo'); $cache_plugins['LiteSpeed']['steps'][] = __('Go to Exclude Tab, find the "Do Not Cache URIs" option', 'wpforo'); $cache_plugins['LiteSpeed']['steps'][] = __('Insert the URL path(s) of your forum page(s) one per line in the option textarea:', 'wpforo') . '
' . implode('
', $board_paths) . ''; $cache_plugins['LiteSpeed']['steps'][] = __('Save it and delete all caches.', 'wpforo'); } if (function_exists("rocket_clean_post")) { //WP Rocket Cache $cache_plugins['WPRocket']['name'] = 'WP Rocket Cache'; $cache_plugins['WPRocket']['steps'][] = __('Please navigate in Dashboard to WP Rocket > Advanced Rules Tab', 'wpforo'); $cache_plugins['WPRocket']['steps'][] = __('Scroll down to "Never cache (URLs)" option', 'wpforo'); $cache_plugins['WPRocket']['steps'][] = __('Insert the URL path(s) of your forum page(s) one per line with wildcard (.*) in the option textarea:', 'wpforo') . '
' . implode('
', array_map( function ( $value ){ return $value . '(.*)'; }, $board_paths)) . ''; $cache_plugins['WPRocket']['steps'][] = __('Save it and delete all caches.', 'wpforo'); } if (function_exists("wpfc_clear_post_cache_by_id")) { //WP Fastest Cache $cache_plugins['WPFastest']['name'] = 'WP Fastest Cache'; $cache_plugins['WPFastest']['steps'][] = __('Please navigate in Dashboard to WP Fastest Cache > Exclude Tab', 'wpforo'); $cache_plugins['WPFastest']['steps'][] = __('In the "Exclude Pages" section click the [Add New Rule] button', 'wpforo'); $cache_plugins['WPFastest']['steps'][] = __('Select [Start with] option in the drop-down menu and insert the URL path(s) of your forum page(s) one per rule in the next field:', 'wpforo') . '
' . implode('
', $board_paths) . ''; $cache_plugins['WPFastest']['steps'][] = __('If you have more than one forum pages (boards) you should create separate rules for each forum board.', 'wpforo'); $cache_plugins['WPFastest']['steps'][] = __('Save rules and delete all caches.', 'wpforo'); } if (function_exists("w3tc_flush_post")) { //W3 Total Cache $cache_plugins['W3Total']['name'] = 'W3 Total Cache'; $cache_plugins['W3Total']['steps'][] = __('Please navigate in Dashboard to Performance > Page Cache admin page', 'wpforo'); $cache_plugins['W3Total']['steps'][] = __('Go to Advanced Tab, scroll down to Rejected URL Strings option', 'wpforo'); $cache_plugins['W3Total']['steps'][] = __('Scroll to Advanced section and insert the URL path(s) of your forum page(s) one per line in the "Never cache the following pages" textarea:', 'wpforo') . '
' . implode('
', $board_paths) . ''; $cache_plugins['W3Total']['steps'][] = __('Save it and delete all caches.', 'wpforo'); } if (is_callable(["WPO_Page_Cache", "delete_single_post_cache"])) { //WP-Optimize Cache $cache_plugins['WPOptimize']['name'] = 'WP-Optimize Cache'; $cache_plugins['WPOptimize']['steps'][] = __('Please navigate in Dashboard to WP-Optimize > Cache admin page', 'wpforo'); $cache_plugins['WPOptimize']['steps'][] = __('Go to Advanced Settings Tab, find the "URLs to exclude from caching" option', 'wpforo'); $cache_plugins['WPOptimize']['steps'][] = __('Insert the URL path(s) of your forum page(s) one per line with wildcard [*] in the option textarea:', 'wpforo') . '
' . implode('
', array_map( function ( $value ){ return $value . '*'; }, $board_paths)) . ''; $cache_plugins['WPOptimize']['steps'][] = __('Save it and delete all caches.', 'wpforo'); } if (class_exists("\SiteGround_Optimizer\Supercacher\Supercacher")) { //SiteGround Optimizer $cache_plugins['SiteGround']['name'] = 'SiteGround Optimizer'; $cache_plugins['SiteGround']['steps'][] = __('Please navigate in Dashboard to SG Optimizer > Caching admin page', 'wpforo'); $cache_plugins['SiteGround']['steps'][] = __('Scroll to Exclude URLs from Caching section and click the "pencil" button, enable it, and click the button again', 'wpforo'); $cache_plugins['SiteGround']['steps'][] = __('Insert the URL path(s) of your forum page(s) with wildcard [*] in the pop-up filed:', 'wpforo') . '
' . implode('
', array_map( function ( $value ){ return $value . '*'; }, $board_paths)) . ''; $cache_plugins['SiteGround']['steps'][] = __('Save it and delete all caches.', 'wpforo'); } return $cache_plugins; } public function cache_plugins_status(){ $not_exluded = []; $cache_plugins = $this->cache_plugins(); $excluded = wpforo_get_option( 'wpforo_excluded_cache', '', false ); $excluded = explode(',', $excluded ); if( ! empty( $cache_plugins ) ){ foreach( $cache_plugins as $cache_plugin ){ if( ! in_array( $cache_plugin['name'], $excluded ) ){ $not_exluded[] = $cache_plugin; } } } return $not_exluded; } public function after_add_reaction( $reaction ) { if( wpfval( $reaction, 'postid' ) ) { WPF()->reaction->create_reaction_cache( $reaction['postid'] ); } } public function after_edit_reaction( $fields ) { if( wpfval( $fields, 'postid' ) ) { wpforo_clean_cache( 'reaction', $fields['postid'] ); } } public function before_delete_reaction( $args, $operator ) { $this->touched_postids = WPF()->reaction->_get_reactions_col( 'postid', $args, $operator ); } public function after_delete_reaction(){ foreach( array_unique(array_filter( $this->touched_postids )) as $postid ) wpforo_clean_cache( 'reaction', $postid ); } }