PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.14.2
Independent Analytics – WordPress Analytics Plugin v2.14.2
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 / IAWP / Custom_WordPress_Columns / Views_Column.php
independent-analytics / IAWP / Custom_WordPress_Columns Last commit date
Views_Column.php 8 months ago
Views_Column.php
81 lines
1 <?php
2
3 namespace IAWP\Custom_WordPress_Columns;
4
5 use IAWP\Capability_Manager;
6 use IAWP\Utils\Number_Formatter;
7 /** @internal */
8 class Views_Column
9 {
10 public static $meta_key = 'iawp_total_views';
11 public static function initialize() : void
12 {
13 if (\get_option('iawp_disable_views_column', 0) === '1') {
14 return;
15 }
16 \add_action('init', [self::class, 'register_custom_post_meta']);
17 \add_filter('manage_posts_columns', [self::class, 'set_column_header'], 10, 2);
18 \add_action('manage_posts_custom_column', [self::class, 'echo_cell_content'], 10, 2);
19 \add_action('pre_get_posts', [self::class, 'configure_sorting']);
20 \add_filter('manage_pages_columns', [self::class, 'set_column_header']);
21 \add_action('manage_pages_custom_column', [self::class, 'echo_cell_content'], 10, 2);
22 \add_action('pre_get_pages', [self::class, 'configure_sorting']);
23 }
24 public static function register_custom_post_meta() : void
25 {
26 foreach (self::post_type_slugs() as $post_type_slug) {
27 \register_post_meta($post_type_slug, self::$meta_key, ['type' => 'integer', 'single' => \true, 'default' => 0, 'show_in_rest' => \true]);
28 \add_filter("manage_edit-{$post_type_slug}_sortable_columns", [self::class, 'enable_sorting']);
29 }
30 }
31 public static function set_column_header(array $columns, ?string $post_type = null) : array
32 {
33 // manage_pages_columns doesn't set the $post_type argument, so checking is_null() works for it
34 if (\is_null($post_type) || \in_array($post_type, self::post_type_slugs())) {
35 $columns[self::$meta_key] = \__('Views', 'independent-analytics') . ' <span class="iawp-hidden-label"><span class="hide">(</span>Independent Analytics<span class="hide">)</span></span>';
36 }
37 return $columns;
38 }
39 public static function echo_cell_content($column_id, $post_id) : void
40 {
41 // Do nothing for columns other than the views column
42 if ($column_id !== self::$meta_key) {
43 return;
44 }
45 $author_id = \intval(\get_post_field('post_author', $post_id));
46 $is_your_post = \get_current_user_id() === $author_id;
47 if (Capability_Manager::can_view_all_analytics() || $is_your_post) {
48 $total_views = \intval(\get_post_meta($post_id, self::$meta_key, \true));
49 echo Number_Formatter::decimal($total_views);
50 } else {
51 echo '-';
52 }
53 }
54 public static function enable_sorting(array $columns) : array
55 {
56 $columns[self::$meta_key] = [self::$meta_key, 'DESC'];
57 return $columns;
58 }
59 public static function configure_sorting($query) : void
60 {
61 // Limit to admin menus
62 if (!\is_admin() || !$query->is_main_query() || \wp_doing_ajax() || \wp_doing_cron()) {
63 return;
64 }
65 $order_by = $query->get('orderby');
66 if ($order_by === self::$meta_key) {
67 $meta_query = ['relation' => 'OR', ['key' => self::$meta_key, 'compare' => 'NOT EXISTS'], ['key' => self::$meta_key]];
68 $query->set('meta_query', $meta_query);
69 $query->set('orderby', 'meta_value_num');
70 }
71 }
72 private static function post_type_slugs() : array
73 {
74 $built_in_post_type_slugs = ['post', 'page'];
75 $post_type_slugs = \get_post_types(['public' => \true, '_builtin' => \false]);
76 $slugs = \array_merge($built_in_post_type_slugs, $post_type_slugs);
77 $disallowed = ['elementor_library', 'e-landing-page'];
78 return \array_diff($slugs, $disallowed);
79 }
80 }
81