156 lines
3.7 KiB
PHP
156 lines
3.7 KiB
PHP
<?php
|
|
// Exit if accessed directly
|
|
if ( !defined( 'ABSPATH' ) ) exit;
|
|
|
|
/**
|
|
* Public Class
|
|
*
|
|
* Class for post views count
|
|
*
|
|
* @package Easy Post Views Count
|
|
* @since 1.0.0
|
|
*/
|
|
class Epvc_public {
|
|
|
|
public function __construct() {
|
|
|
|
// To update post views count
|
|
add_action( 'wp', array($this, 'epvc_update_post_count') , 100);
|
|
|
|
// Display post views count
|
|
add_filter( "the_content", array($this, "epvc_display_post_views") );
|
|
|
|
// Print style for views icon
|
|
add_action( "wp_print_styles", array($this, "epvc_print_style") );
|
|
|
|
// Shortcode to print post views cout
|
|
// Shortcode : [epvc_views id=""]
|
|
add_shortcode( 'epvc_views', array($this, 'epvc_display_post_views_shortcode') );
|
|
}
|
|
|
|
/**
|
|
* Post count update
|
|
*
|
|
* Update post views count
|
|
*
|
|
* @package Easy Post Views Count
|
|
* @since 1.0.0
|
|
*/
|
|
function epvc_update_post_count(){
|
|
global $post, $epvc_settings;
|
|
|
|
if( is_singular() ){
|
|
|
|
$post_types = is_array($epvc_settings['post_types'])?$epvc_settings['post_types']:array();
|
|
$login_users = sanitize_text_field($epvc_settings['login_users']);
|
|
$ips = sanitize_text_field($epvc_settings['ips']);
|
|
|
|
$excluded_ips = array();
|
|
if( !empty($ips) ){
|
|
$excluded_ips = array_filter( explode(",", $ips) );
|
|
|
|
}
|
|
|
|
$storedIds = array();
|
|
if( isset($_COOKIE['epvc_post_views']) && $_COOKIE['epvc_post_views'] != 'null' ) {
|
|
$storedIds = json_decode( $_COOKIE['epvc_post_views'] );
|
|
$postIds = json_decode( $_COOKIE['epvc_post_views']);
|
|
}
|
|
|
|
if( in_array( $post->post_type, array_keys($post_types) ) && !in_array( $_SERVER['REMOTE_ADDR'] , $excluded_ips ) && !in_array($post->ID ,$storedIds) ){
|
|
|
|
$postCount = get_post_meta( $post->ID, 'post_count_'.$post->ID, true );
|
|
if( $login_users == 'yes' && is_user_logged_in() ){
|
|
} else {
|
|
$postCount = !empty($postCount)?$postCount+1:1;
|
|
$postIds[] = $post->ID;
|
|
setcookie("epvc_post_views", json_encode($postIds) , time()+3600*24*365*10, '/');
|
|
}
|
|
update_post_meta( $post->ID, 'post_count_'.$post->ID, $postCount );
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Post content display
|
|
*
|
|
* Display post views
|
|
*
|
|
* @package Easy Post Views Count
|
|
* @since 1.0.0
|
|
*/
|
|
function epvc_display_post_views( $content ){
|
|
|
|
global $epvc_settings;
|
|
|
|
$position = $epvc_settings['position'];
|
|
$CountContent = epvc_display_post_views();
|
|
|
|
if( $position == 'after_content' ){
|
|
$postContent = $content.$CountContent;
|
|
} else if( $position == 'before_content' ) {
|
|
$postContent = $CountContent.$content;
|
|
} else {
|
|
$postContent = $content;
|
|
}
|
|
return $postContent;
|
|
}
|
|
|
|
/**
|
|
* Post views count style
|
|
*
|
|
* Css for post count icon
|
|
*
|
|
* @package Easy Post Views Count
|
|
* @since 1.0.0
|
|
*/
|
|
function epvc_print_style(){
|
|
?>
|
|
<style type="text/css">
|
|
.epvc-eye {
|
|
margin-right: 3px;
|
|
width: 13px;
|
|
display: inline-block;
|
|
height: 13px;
|
|
border: solid 1px #000;
|
|
border-radius: 75% 15%;
|
|
position: relative;
|
|
transform: rotate(45deg);
|
|
}
|
|
.epvc-eye:before {
|
|
content: '';
|
|
display: block;
|
|
position: absolute;
|
|
width: 5px;
|
|
height: 5px;
|
|
border: solid 1px #000;
|
|
border-radius: 50%;
|
|
left: 3px;
|
|
top: 3px;
|
|
}
|
|
</style>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Shortcode
|
|
*
|
|
* Get post view shortcode
|
|
*
|
|
* @package Easy Post Views Count
|
|
* @since 1.0.0
|
|
*/
|
|
function epvc_display_post_views_shortcode( $atts, $content ){
|
|
// Getting attributes of shortcode
|
|
extract( shortcode_atts( array(
|
|
'id' => '',
|
|
), $atts ) );
|
|
ob_start();
|
|
|
|
echo epvc_display_post_views( $id );
|
|
|
|
$content .= ob_get_clean();
|
|
return $content;
|
|
}
|
|
}
|
|
return new Epvc_public();
|