4

我正在开发一个 wordpress,并使用一个插件 wordpress 流行的帖子,并面临这个问题。

如何在博客的类别列表页面或索引页面上显示访问者查看页面的次数。此信息已经存在,插件正在使用该信息在侧边栏中显示相同的信息,不确定如何使用相同的插件数据在博客页面上显示页面查看次数。

我试图找到这个,但没有得到我想要的。

请建议如何做到这一点?

我使用的插件是http://wordpress.org/extend/plugins/wordpress-popular-posts/

4

3 回答 3

7

你可以简单地做到这一点没有插件。

要计算帖子浏览量,您要做的第一件事是将以下代码添加到您的 WordPress 主题functions.php

<?php
/*
 * Set post views count using post meta//functions.php
 */
function customSetPostViews($postID) {
    $countKey = 'post_views_count';
    $count = get_post_meta($postID, $countKey, true);
    if($count==''){
        $count = 0;
        delete_post_meta($postID, $countKey);
        add_post_meta($postID, $countKey, '1');
    }else{
        $count++;
        update_post_meta($postID, $countKey, $count);
    }
}
?>

现在我们将在single.php中调用这个函数来更新数据库中的计数值。

<?php 
    customSetPostViews(get_the_ID());//single.php
?>

现在在同一个single.php文件中,如果我们想显示帖子查看次数,我们可以使用以下代码:

<?php
    $post_views_count = get_post_meta( get_the_ID(), 'post_views_count', true );
    // Check if the custom field has a value.
    if ( ! empty( $post_views_count ) ) {
        echo $post_views_count;
    }
?>

现在按帖子查看次数按降序显示所有热门帖子。使用此代码:

<?php//popular post query
    query_posts('meta_key=post_views_count&posts_per_page=5&orderby=meta_value_num&
    order=DESC');
    if (have_posts()) : while (have_posts()) : the_post();
?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
    endwhile; endif;
    wp_reset_query();
?>

快乐编码

于 2017-02-21T05:39:35.907 回答
2

wpp_get_views插件提供了一个调用函数。如果您知道要显示查看次数的帖子/页面的 ID,您需要做的就是使用该 ID 作为参数调用函数。例如:

$count = wpp_get_views($post->ID); 
于 2012-10-18T11:41:39.630 回答
0
add_action('init','cr_tbl',55);

function cr_tbl(){

        global $wpdb;
    $table_add_two = $wpdb->prefix."post_view";
    $cat_rating_ddl="
        CREATE TABLE IF NOT EXISTS  `".$table_add_two."` (
          `pvid` INT(11) UNSIGNED AUTO_INCREMENT,
          `ip` varchar(255) NOT NULL,
          `device` varchar(255) NOT NULL,         
          `postid` int(11) NOT NULL,
          `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
          PRIMARY KEY(pvid)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    ";  
    $all_tables = array();
    $mytables=$wpdb->get_results("SHOW TABLES");
    foreach ($mytables as $mytable){
        foreach ($mytable as $t){                   
            $all_tables[]=$t;
        }
    }       
    $sql_one='';
    if(!in_array($table_add_two,$all_tables)){
        $sql_one.=$cat_rating_ddl;
        if(!empty($sql_one)){
            if(!function_exists('wp_should_upgrade_global_tables')){
                require(ABSPATH . 'wp-admin/includes/upgrade.php');
            }
            dbDelta($cat_rating_ddl);
        }       
    }

}

function get_the_user_ip() {

    if(!empty($_SERVER['HTTP_CLIENT_IP'])){
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    }elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }else{
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;}

    function add_view_record($pid){
     global $wpdb;
     $ip = get_the_user_ip();    
     $device = (wp_is_mobile())?'mobile':'desktop';         
     $table_name = $wpdb->prefix.'post_view';
     $list = $wpdb->get_results("SELECT * FROM $table_name WHERE postid = $pid and ip = '".$ip."'");        
     if(empty($list)){      
        $wpdb->insert($table_name, 
            array( 
                'ip' => $ip,
                'device' => $device,
                'postid' =>$pid,                
            )
        );                                   
     }}

    function get_view_count($pid){
    $total=0;
    global $wpdb;       
    $table_name = $wpdb->prefix.'post_view';
    $list = $wpdb->get_results("SELECT count(pvid) as total FROM $table_name WHERE postid = ".$pid);        
    if(!empty($list)){         
           $total=$list[0]->total;  
    }       
    return $total;}
于 2020-07-04T07:58:20.377 回答