不会健身的程序员
不是好作家

wordpress不用插件实现阅读数、兼容wp-postview、和wp-super-cache

想必很多人用wordpress建网站的时候都遇到过,既想要记录文章的浏览数又想要使用缓存插件,但是鱼和熊掌不可兼得,上网查找网上的办法又差强人意。那么这篇文章可能可以帮到你,下面小林介绍下本站不用插件实现文章阅读数的功能,并兼容缓存插件wp-super-cache的方法,希望能帮到想实现的读者。文章基本的代码基本可以复制粘贴就能用了!

在主题的functions.php加入下面代码

function _get_post_views() {
    global $post;
    $post_ID = $post->ID;
    $views = '<span data-viewid="' . $post_ID . '">加载中...</span>';
    return $views;
}
function _post_views_record() {
    if (is_singular ()) {
        global $post;
        $post_ID = $post->ID;
        if ($post_ID) {
            $post_views = ( int ) get_post_meta ( $post_ID, 'views', true );
            if (! update_post_meta ( $post_ID, 'views', ($post_views + 1) )) {
                add_post_meta ( $post_ID, 'views', 1, true );
            }
        }
    }
}
if (! function_exists ( 'the_views' )) :
    function the_views() {
        echo _get_post_views ();
    }

endif;

add_action('wp_ajax_nopriv_lin_view', 'lin_view');
add_action('wp_ajax_lin_view', 'lin_view');
function lin_view() {
    global $wpdb,$post;
    $post_id_str = $_POST["postids"];
    $single_str = $_POST["single"];
    if( empty($post_id_str) ) {
        die;
    }
    $single_b = false;
    if(!empty($single_str)  && $single_str == 'true') {
        $single_b = true;
    }
    $post_ids = split(",", $post_id_str);
    $views_array = array();
    foreach ($post_ids as  $post_id) {
        $post_count =     (int) get_post_meta($post_id, 'views', true);
        if($single_b) {
            $post_count += 1;
            if (!update_post_meta($post_id, 'views', ($post_count))) {
                add_post_meta($post_id, 'views', 1, true);
            }
        }
        $views_array[] =  array(
                id => $post_id,
                count => ($post_count)
        );
    }
    print_r(json_encode($views_array));
    die;
}
wp_localize_script( 'script', 'wpl_ajax_url', admin_url() . "admin-ajax.php");

在页面中添加下面这段脚本

需要在加载jquery.js之后加入下面这段脚本

function ajax_view_count(){
    var _ids = '';
    $('span[data-viewid]').each(function(i,n) {
        if(_ids) {
            _ids += ',';
        }
        _ids += $(n).attr('data-viewid');
    });
    var _render_view_span =  function(_data) {
        if(_data) {
            for(var i in _data) {
                if(_data[i] && _data[i].id) {
                    $("span[data-viewid='"+_data[i].id+"']").html(_data[i].count).removeAttr('data-viewid');
                }
            }
        }else {
            $('span[data-viewid]').each(function(i,n) {
                $(n).html('-1');
            });
        }
    }
    if(_ids) {
        $.ajax({
            url: wpl_ajax_url,
            type: 'POST',
            dataType: 'json',
            data: {
                action: 'lin_view',
                postids:_ids,
                single:$('body').hasClass('single')?true:false
            },
            success: function(data) {
                _render_view_span(data);
            },
            error: function(xhr, textStatus, errorThrown) {
                _render_view_span();
            }
        });
    }
}
$(functions(){//页面加载完成后执行
    ajax_view_count();
})
赞(0)
转载请注明出处:林俊龙博客 » wordpress不用插件实现阅读数、兼容wp-postview、和wp-super-cache

评论 5

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    路过!!!!!!

    茹雪 4年前 (2015-12-10) 来自天朝的朋友 未知浏览器 Unknow Os 回复
  2. #2

    网站不错,过来看看!

    可儿 4年前 (2016-01-06) 来自天朝的朋友 未知浏览器 Unknow Os 回复
  3. #3

    您好,我安装wp super cache 后,不能解决文章阅读数统计的问题。我的阅读数统计是主题自带的,没有安装插件。我用您的方法,还是不能正常统计,能帮我看看吗。我的站点是http://www.mahu365.com,谢谢!

    山那边 3年前 (2016-05-26) 来自天朝的朋友 未知浏览器 Unknow Os 回复

年年岁岁花相识,岁岁年年人不同

给我留言网站地图

谢主隆恩

支付宝扫一扫打赏

微信扫一扫打赏