PluginProbe
ThinkRank AI SEO – AI SEO Plugin for WordPress: Schema, XML Sitemaps, Meta Tags, Search Console & Local SEO / trunk
ThinkRank AI SEO – AI SEO Plugin for WordPress: Schema, XML Sitemaps, Meta Tags, Search Console & Local SEO vtrunk
2.6.0 2.5.0 2.4.0 2.3.0 2.2.0 2.1.1 2.1.0 2.0.2 2.0.1 2.0.0 1.32.0 1.31.0 1.30.0 1.29.0 1.28.0 1.27.0 1.26.0 1.25.0 trunk 1.0.0 1.0.1 1.0.2 1.1.0 1.10.0 1.11.0 All 47 releases
thinkrank / includes / core / class-asset-optimizer.php

class-asset-optimizer.php in ThinkRank AI SEO – AI SEO Plugin for WordPress: Schema, XML Sitemaps, Meta Tags, Search Console & Local SEO trunk, at includes/core/class-asset-optimizer.php

145 lines 3.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Asset Optimizer Class
4 *
5 * Simple asset optimization for better performance.
6 * Implements preloading and basic optimization strategies.
7 *
8 * @package ThinkRank
9 * @subpackage Core
10 * @since 1.0.0
11 */
12
13 declare(strict_types=1);
14
15 namespace ThinkRank\Core;
16
17 // Prevent direct access.
18 if ( ! defined( 'ABSPATH' ) ) {
19 exit;
20 }
21
22 /**
23 * Asset Optimizer Class
24 *
25 * @since 1.0.0
26 */
27 class Asset_Optimizer {
28
29 /**
30 * Initialize asset optimization
31 *
32 * @since 1.0.0
33 */
34 public function __construct() {
35 add_action('admin_init', [$this, 'init_admin_optimizations']);
36 }
37
38 /**
39 * Initialize admin-specific optimizations
40 *
41 * @since 1.0.0
42 */
43 public function init_admin_optimizations(): void {
44 // Only optimize on ThinkRank admin pages
45 if (!$this->is_thinkrank_admin_page()) {
46 return;
47 }
48
49 add_action('admin_head', [$this, 'add_asset_preloading'], 1);
50 add_action('admin_head', [$this, 'add_performance_hints'], 2);
51 }
52
53 /**
54 * Check if current page is a ThinkRank admin page
55 *
56 * @since 1.0.0
57 *
58 * @return bool True if ThinkRank admin page
59 */
60 private function is_thinkrank_admin_page(): bool {
61 $screen = get_current_screen();
62
63 if (!$screen) {
64 return false;
65 }
66
67 // Check for ThinkRank admin pages
68 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reading page parameter for screen detection, not processing form data.
69 return strpos($screen->id, 'thinkrank') !== false ||
70 strpos($screen->base, 'thinkrank') !== false ||
71 (isset($_GET['page']) && strpos(sanitize_text_field(wp_unslash($_GET['page'])), 'thinkrank') !== false); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
72 }
73
74 /**
75 * Add asset preloading headers
76 *
77 * @since 1.0.0
78 */
79 public function add_asset_preloading(): void {
80 $plugin_url = plugin_dir_url(THINKRANK_PLUGIN_FILE);
81
82 $assets = [
83 // Critical CSS
84 [
85 'url' => $plugin_url . 'assets/admin.css',
86 'type' => 'style'
87 ],
88 // Critical JS
89 [
90 'url' => $plugin_url . 'assets/admin.js',
91 'type' => 'script'
92 ]
93 ];
94
95 foreach ($assets as $asset) {
96 // Check if file exists before preloading
97 $file_path = str_replace($plugin_url, THINKRANK_PLUGIN_DIR, $asset['url']);
98 if (file_exists($file_path)) {
99 printf(
100 '<link rel="preload" href="%s" as="%s"%s>' . "\n",
101 esc_url($asset['url']),
102 esc_attr($asset['type']),
103 $asset['type'] === 'style' ? ' type="text/css"' : ''
104 );
105 }
106 }
107 }
108
109 /**
110 * Add performance hints
111 *
112 * @since 1.0.0
113 */
114 public function add_performance_hints(): void {
115 // DNS prefetch for external APIs (if configured)
116 $external_domains = [
117 'api.openai.com',
118 'api.anthropic.com',
119 'generativelanguage.googleapis.com'
120 ];
121
122 foreach ($external_domains as $domain) {
123 printf('<link rel="dns-prefetch" href="//%s">' . "\n", esc_attr($domain));
124 }
125
126 // Remove redundant viewport meta tag: WordPress admin already sets this.
127 // Keeping only DNS prefetch hints here.
128 }
129
130 /**
131 * Get asset optimization stats
132 *
133 * @since 1.0.0
134 *
135 * @return array Optimization statistics
136 */
137 public function get_stats(): array {
138 return [
139 'preloading_enabled' => $this->is_thinkrank_admin_page(),
140 'dns_prefetch_domains' => 3,
141 'optimized_pages' => ['thinkrank admin pages']
142 ];
143 }
144 }
145