PluginProbe ʕ •ᴥ•ʔ
Post Views Counter / 1.1.1
Post Views Counter v1.1.1
1.7.13 1.7.12 1.7.11 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.2.0 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.2 1.3.2.1 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.7.0 1.7.1 1.7.10 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9
post-views-counter / includes / query.php
post-views-counter / includes Last commit date
columns.php 10 years ago counter.php 10 years ago cron.php 10 years ago frontend.php 10 years ago functions.php 10 years ago query.php 10 years ago settings.php 10 years ago update.php 10 years ago widgets.php 10 years ago
query.php
109 lines
1 <?php
2 if ( ! defined( 'ABSPATH' ) )
3 exit;
4
5 new Post_Views_Counter_Query();
6
7 class Post_Views_Counter_Query {
8
9 public function __construct() {
10 // actions
11 add_action( 'pre_get_posts', array( $this, 'extend_pre_query' ), 9 );
12
13 // filters
14 add_filter( 'posts_join', array( $this, 'posts_join' ), 10, 2 );
15 add_filter( 'posts_groupby', array( $this, 'posts_groupby' ), 10, 2 );
16 add_filter( 'posts_orderby', array( $this, 'posts_orderby' ), 10, 2 );
17 add_filter( 'posts_fields', array( $this, 'posts_fields' ), 10, 2 );
18 }
19
20 /**
21 * Extend query with post_views orderby parameter.
22 *
23 * @param object $query
24 */
25 public function extend_pre_query( $query ) {
26 if ( isset( $query->query_vars['orderby'] ) && $query->query_vars['orderby'] === 'post_views' )
27 $query->order_by_post_views = true;
28 }
29
30 /**
31 * Modify the db query to use post_views parameter.
32 *
33 * @global object $wpdb
34 * @param string $join
35 * @param object $query
36 * @return string
37 */
38 public function posts_join( $join, $query ) {
39 // is it sorted by post views?
40 if ( ( isset( $query->order_by_post_views ) && $query->order_by_post_views ) || apply_filters( 'pvc_extend_post_object', false, $query ) === true ) {
41 global $wpdb;
42
43 $join .= " LEFT JOIN " . $wpdb->prefix . "post_views pvc ON pvc.id = " . $wpdb->prefix . "posts.ID AND pvc.type = 4";
44 }
45
46 return $join;
47 }
48
49 /**
50 * Group posts using the post ID.
51 *
52 * @global object $wpdb
53 * @param string $groupby
54 * @param object $query
55 * @return string
56 */
57 public function posts_groupby( $groupby, $query ) {
58 // is it sorted by post views?
59 if ( ( isset( $query->order_by_post_views ) && $query->order_by_post_views ) || apply_filters( 'pvc_extend_post_object', false, $query ) === true ) {
60 global $wpdb;
61
62 $groupby = trim( $groupby );
63
64 if ( strpos( $groupby, $wpdb->prefix . 'posts.ID' ) === false )
65 $groupby = ( $groupby !== '' ? $groupby . ', ' : '') . $wpdb->prefix . 'posts.ID';
66 }
67
68 return $groupby;
69 }
70
71 /**
72 * Order posts by post views.
73 *
74 * @global object $wpdb
75 * @param string $orderby
76 * @param object $query
77 * @return string
78 */
79 public function posts_orderby( $orderby, $query ) {
80 // is it sorted by post views?
81 if ( isset( $query->order_by_post_views ) && $query->order_by_post_views ) {
82 global $wpdb;
83
84 $order = $query->get( 'order' );
85 $orderby = 'pvc.count ' . $order . ', ' . $wpdb->prefix . 'posts.ID ' . $order;
86 }
87
88 return $orderby;
89 }
90
91 /**
92 * Return post views in queried post objects.
93 *
94 * @global object $wpdb
95 * @param string $fields
96 * @param object $query
97 * @return string
98 */
99 public function posts_fields( $fields, $query ) {
100 // is it sorted by post views?
101 if ( ( isset( $query->order_by_post_views ) && $query->order_by_post_views ) || apply_filters( 'pvc_extend_post_object', false, $query ) === true ) {
102 global $wpdb;
103
104 $fields = $wpdb->prefix . 'posts.ID, IFNULL( pvc.count, 0 ) AS post_views';
105 }
106
107 return $fields;
108 }
109 }