<?php if (!defined('ABSPATH')) die('No direct access allowed'); final class WP_QueryWoofCounter { public $post_count = 0; public $found_posts = 0; public $key_string = ""; public $table = ""; public function __construct($query) { $saving_memory = apply_filters('woof_counter_method', false); global $wpdb; $query = (array) $query; if ($saving_memory) { $query["nopaging"] = false; $query["posts_per_page"] = 1; } $key = md5(json_encode($query)); //*** $this->key_string = 'woof_count_cache_' . $key; $this->table = WOOF::$query_cache_table; //*** $woof_settings = get_option('woof_settings', array()); WOOF_REQUEST::set('woof_before_recount_query', 1); if (isset($woof_settings['cache_count_data']) AND $woof_settings['cache_count_data']) { $value = $this->get_value(); if ($value != -1) { $this->post_count = $this->found_posts = $value; } else { $q = new WP_QueryWOOFCounterIn($query); if ($saving_memory) { $this->post_count = $this->found_posts = $q->found_posts; } else { $this->post_count = $this->found_posts = $q->post_count; } unset($q); $this->set_value(); } } else { $q = new WP_QueryWOOFCounterIn($query); if ($saving_memory) { $this->post_count = $this->found_posts = $q->found_posts; } else { $this->post_count = $this->found_posts = $q->post_count; } unset($q); } WOOF_REQUEST::del('woof_before_recount_query'); } private function set_value() { global $wpdb; $data = array( array( 'type' => 'string', 'val' => $this->key_string ), array( 'type' => 'int', 'val' => $this->post_count, ), ); $wpdb->query(WOOF_HELPER::woof_prepare("INSERT INTO {$this->table} (mkey, mvalue) VALUES (%s, %d)", $data)); } private function get_value() { global $wpdb; $result = -1; $data = array( array( 'type' => 'string', 'val' => $this->key_string ) ); $sql = WOOF_HELPER::woof_prepare("SELECT mkey,mvalue FROM {$this->table} WHERE mkey='%s'", $data); $value = $wpdb->get_results($sql); if (!empty($value)) { $value = end($value); if (isset($value->mkey)) { $result = $value->mvalue; } } return $result; } } final class WP_QueryWOOFCounterIn extends WP_Query { function __construct($query = '') { parent::__construct($query); } function set_found_posts($q, $limits) { return false; } function setup_postdata($post) { return false; } function the_post() { return FALSE; } function have_posts() { return FALSE; } }