Wordpress主题技巧

WordPress 技巧:使用内存缓存提高 Postviews 效率

WordPress 技巧:使用内存缓存提高 Postviews 效率

使用 WP-Postview 插件进行日志浏览数统计的时候,会有个问题,就是每个页面会多出三个 SQL 查询。这样每次浏览日志都会多出三次查询,对数据库其实是一次蛮大的负担,有没有办法解决这个问题呢?如果你和我一样网站启用了 Memcached 这类内存缓存组件的话,我们可以把日志的流量缓存到内存中,每次增加10次浏览才写入数据库中去。


<?php
/*
Plugin Name: WPJAM Memcached PostView
Plugin URI: http://blog.wpjam.com/m/memcached-postviews/ 
Description: 使用内存缓存提高 WP-Postviews 效率
Version: 0.1
Author: Denis
Author URI: http://blog.wpjam.com/
*/
add_action('init','wpjam_postviews');
function wpjam_postviews(){
    if(function_exists('the_views')){ //已经安装了 postview 插件
        global $wp_object_cache;
        if(isset($wp_object_cache->mc) && $wp_object_cache->mc){ //已经安装了 memcached 插件
            add_filter('update_post_metadata','wpjam_postviews_update_post_metadata',10,5);
            function wpjam_postviews_update_post_metadata($check, $object_id, $meta_key, $meta_value, $prev_value ){
                if($meta_key == 'views'){                    
                    wp_cache_set($object_id, $meta_value,'views'); 
                    $cached_post_views = 10;
                    if($meta_value%$cached_post_views == 0){ //每增加 10 次浏览才写入数据库中去
                        return $check;
                    }else{
                        return true;
                    }
                }else{
                    return $check;
                }
            }

            add_filter('get_post_metadata','wpjam_postviews_get_post_metadata',10,4);
            function wpjam_postviews_get_post_metadata($check, $object_id, $meta_key, $single ){
                if($meta_key == 'views' ){
                    $views = wp_cache_get($object_id,'views'); //显示的时候直接从内存中获取
                    if($views === false){
                        return $check;
                    }else{
                        return $views;
                    }
                }elseif($meta_key  == ''){
                    $views = wp_cache_get($object_id,'views'); 
                    if($views === false){
                        return $check;
                    }else{
                        $meta_cache = wp_cache_get($object_id, 'post_meta');
                        if ( !$meta_cache ) {
                            $meta_cache = update_meta_cache( 'post', array( $object_id ) );
                            $meta_cache = $meta_cache[$object_id];
                        }
                        $meta_cache['views'][0] = $views;
                        return $meta_cache;
                    }
                }else{
                    return $check;                    
                }
            }
        }
    }
}

将上面的代码复制到当前主题的 funtions.php 文件中,或者直接当做一个插件上传激活即可。

使用内存缓存日志的浏览数,如果不小心把将内存缓存的数据清掉,日志的浏览数会丢失一部分,但是肯定少于10了。 :-)

标签:WordPress 技巧

Wordpress主题技巧

更多有关于 Wordpress主题技巧

域名解析教程

Metaslider幻灯片使用详解!

塔克网整站模板 安装使用指南

WordPress如何备份网站数据库和文件?WordPress整站搬家操作流程。

WordPress网站安全设置教程

国外英文广告联盟网站模板,WordPress主题整站演示地址列表

WordPress主题开发:开启文章缩略图功能

WordPress 自定义头像插件:WP User Avatar

WordPress 后台管理界面UI自定义插件:WP Admin UI Customize

本人擅长Ai、Fw、Fl、Br、Ae、Pr、Id、Ps等软件的安装与卸载,精通CSS、JavaScript、PHP、ASP、C、C++、C#、Java、Ruby、Perl、Lisp、Python、Objective-C、ActionScript、Pascal等单词的拼写,熟悉Windows、Linux、OS X、Android、iOS、WP8等系统的开关机。

通过下面的方式来联系我们:

电邮:138762189@qq.com

联系QQ:点击这里给我发消息

官方站:www.tadke.com

※ ※ 联系请加我的企鹅号 ※※

※ ※技术支持请微信联系站长 ※※

Copyright © 2016 Tadke.com. Powered by Wordpress.