PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.10
Independent Analytics – WordPress Analytics Plugin v1.10
2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / inc / view_counter.php
independent-analytics / inc Last commit date
ajax 3 years ago databases 3 years ago migrations 3 years ago models 3 years ago queries 3 years ago utils 3 years ago chart.php 3 years ago chart_geo.php 3 years ago dashboard_widget.php 3 years ago db.php 3 years ago filters.php 3 years ago freemius.php 3 years ago independent_analytics.php 3 years ago known_referrers.php 3 years ago quick_stats.php 3 years ago rest_api.php 3 years ago settings.php 3 years ago table.php 3 years ago table_geo.php 3 years ago table_referrers.php 3 years ago table_views.php 3 years ago track_resource_changes.php 3 years ago view_counter.php 3 years ago
view_counter.php
112 lines
1 <?php
2
3 namespace IAWP;
4
5 class View_Counter
6 {
7 public function __construct()
8 {
9 add_action('the_content', [$this, 'output_counter']);
10 add_action('init', [$this, 'add_shortcode']);
11 }
12
13 public function output_counter($content)
14 {
15 if (!$this->passes_checks()) {
16 return $content;
17 }
18
19 $position = IAWP()->get_option('iawp_view_counter_position', 'after');
20 $counter = $this->get_counter_html();
21
22 if ($position == 'before' || $position == 'both') {
23 $content = $counter . $content;
24 }
25 if ($position == 'after' || $position == 'both') {
26 $content .= $counter;
27 }
28
29 return $content;
30 }
31
32 public function get_counter_html($label = null, $icon = null)
33 {
34 $view_count = $this->get_view_count(get_the_ID());
35
36 if (is_null($label)) {
37 $label = IAWP()->get_option('iawp_view_counter_label', esc_html__('Views:', 'iawp'));
38 }
39 if (is_null($icon)) {
40 $icon = get_option('iawp_view_counter_icon', true);
41 }
42 if ($icon) {
43 $label = '<span class="dashicons dashicons-chart-bar"></span> ' . $label;
44 }
45
46 return '<div class="iawp-view-counter"><span class="label">' . wp_kses_post($label) . '</span> <span class="count">' . absint($view_count) . '</span></div>';
47 }
48
49 private function passes_checks(): bool
50 {
51 if (!is_singular() || !in_the_loop() || !is_main_query()) {
52 return false;
53 }
54
55 if (IAWP()->get_option('iawp_view_counter_enable', false) == false) {
56 return false;
57 }
58 if (!in_array(get_post_type(), IAWP()->get_option('iawp_view_counter_post_types', []))) {
59 return false;
60 }
61
62 $exclude = IAWP()->get_option('iawp_view_counter_exclude', '');
63 if ($exclude != '') {
64 $exclude = explode(',', $exclude);
65 if (in_array(get_the_ID(), $exclude)) {
66 return false;
67 }
68 }
69
70 return true;
71 }
72
73 private function get_view_count(int $singular_id)
74 {
75 global $wpdb;
76
77 $views_table = DB::views_table();
78 $resources_table = DB::resources_table();
79
80 $query = $wpdb->prepare("
81 SELECT
82 count(*) AS views
83 FROM
84 $resources_table
85 LEFT JOIN $views_table ON $resources_table.id = $views_table.resource_id
86 WHERE
87 resource = 'singular'
88 AND singular_id = %d
89 GROUP BY
90 singular_id
91 ", $singular_id);
92 $view_count = $wpdb->get_var($query);
93
94 return is_null($view_count) ? 0 : $view_count;
95 }
96
97 public function add_shortcode()
98 {
99 add_shortcode('iawp_view_counter', [$this, 'shortcode']);
100 }
101
102 public function shortcode($atts)
103 {
104 $a = shortcode_atts([
105 'label' => IAWP()->get_option('iawp_view_counter_label', esc_html__('Views:', 'iawp')),
106 'icon' => true,
107 ], $atts);
108
109 return $this->get_counter_html($a['label'], $a['icon']);
110 }
111 }
112