PluginProbe
xSpeed Cache: AI-Powered Performance Hub with MCP, Caching & CDN / 1.3.2
xSpeed Cache: AI-Powered Performance Hub with MCP, Caching & CDN v1.3.2
1.3.3 1.3.2 1.3.1 1.3.0 1.2.4 trunk 1.0.0 1.0.1 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.1.5 1.1.6 1.1.7 1.1.8 All 29 releases
← All changes | includes/modules/Minify/MinifyModule.php +45 -27 1.2.41.3.2 View file →
@@ -30,12 +30,12 @@
30 30 public const VERSION = '1.2.0';
31 31
32 32 public function ui_metadata(): array {
33 33 return array(
34 - 'label' => 'CSS & JavaScript',
35 - 'tab_label' => 'Minify', // its own tab on the CSS & JavaScript page
34 + 'label' => __( 'CSS & JavaScript', 'xspeed' ),
35 + 'tab_label' => __( 'Minify', 'xspeed' ), // its own tab on the CSS & JavaScript page
36 36 'icon' => 'Wand2',
37 - 'description' => 'Strip whitespace and rewrite enqueued CSS / JS.',
37 + 'description' => __( 'Strip whitespace and rewrite enqueued CSS / JS.', 'xspeed' ),
38 38 // Host page: Minify (this module) / Critical CSS (Pro) / Unused
39 39 // CSS (Pro) as tabs — the three CSS/JS optimizations live on one
40 40 // page instead of three sidebar rows (FBS-83633).
41 41 'custom_panel' => 'CssJsPanel',
@@ -46,57 +46,57 @@
46 46 return array(
47 47 'minify_html' => array(
48 48 'type' => 'bool',
49 49 'default' => false,
50 - 'label' => 'Minify HTML',
50 + 'label' => __( 'Minify HTML', 'xspeed' ),
51 51 // Names the logged-out caveat up front: minification runs on the
52 52 // request that WRITES a cache entry, and should_cache() refuses
53 53 // logged-in requests — so "view source while logged in" shows
54 54 // un-minified HTML and reads as the feature being broken. (#2)
55 - 'description' => 'Strip whitespace and comments from HTML output, including inline <style> and <script> blocks. Safe on most themes. Applies to cached (logged-out) responses — view the page in a private window to see the result.',
55 + 'description' => __( 'Strip whitespace and comments from HTML output, including inline <style> and <script> blocks. Safe on most themes. Applies to cached (logged-out) responses — view the page in a private window to see the result.', 'xspeed' ),
56 56 ),
57 57 'minify_css' => array(
58 58 'type' => 'bool',
59 59 'default' => false,
60 - 'label' => 'Minify CSS',
61 - 'description' => 'Compress and rewrite enqueued local stylesheets. External CSS is left untouched.',
60 + 'label' => __( 'Minify CSS', 'xspeed' ),
61 + 'description' => __( 'Compress and rewrite enqueued local stylesheets. External CSS is left untouched.', 'xspeed' ),
62 62 ),
63 63 'minify_js' => array(
64 64 'type' => 'bool',
65 65 'default' => false,
66 - 'label' => 'Minify JavaScript',
67 - 'description' => 'Compress enqueued local scripts. Disable if you hit script-loading conflicts on the frontend.',
66 + 'label' => __( 'Minify JavaScript', 'xspeed' ),
67 + 'description' => __( 'Compress enqueued local scripts. Disable if you hit script-loading conflicts on the frontend.', 'xspeed' ),
68 68 ),
69 69 'defer_js' => array(
70 70 'type' => 'bool',
71 71 'default' => false,
72 - 'label' => 'Defer JavaScript',
73 - 'description' => 'Add defer="defer" to enqueued script tags so they execute after HTML parsing. jQuery + its hard dependencies are skipped automatically.',
72 + 'label' => __( 'Defer JavaScript', 'xspeed' ),
73 + 'description' => __( 'Add defer="defer" to enqueued script tags so they execute after HTML parsing. jQuery + its hard dependencies are skipped automatically.', 'xspeed' ),
74 74 ),
75 75 'delay_js' => array(
76 76 'type' => 'bool',
77 77 'default' => false,
78 - 'label' => 'Delay JavaScript Until Interaction',
79 - 'description' => 'Postpone script loading until the visitor scrolls, moves the mouse, taps, or presses a key. Drastically improves first paint on script-heavy pages; can break above-the-fold scripted UI — test before leaving on.',
78 + 'label' => __( 'Delay JavaScript Until Interaction', 'xspeed' ),
79 + 'description' => __( 'Postpone script loading until the visitor scrolls, moves the mouse, taps, or presses a key. Drastically improves first paint on script-heavy pages; can break above-the-fold scripted UI — test before leaving on.', 'xspeed' ),
80 80 ),
81 81 'async_css' => array(
82 82 'type' => 'bool',
83 83 'default' => false,
84 - 'label' => 'Load CSS Asynchronously',
85 - 'description' => 'Rewrite stylesheet link tags to load non-blocking via the print-then-all pattern. Pairs well with critical-CSS workflows; can cause a flash of unstyled content if the theme has no critical CSS.',
84 + 'label' => __( 'Load CSS Asynchronously', 'xspeed' ),
85 + 'description' => __( 'Rewrite stylesheet link tags to load non-blocking via the print-then-all pattern. Pairs well with critical-CSS workflows; can cause a flash of unstyled content if the theme has no critical CSS.', 'xspeed' ),
86 86 ),
87 87 'remove_query_strings' => array(
88 88 'type' => 'bool',
89 89 'default' => false,
90 - 'label' => 'Remove Asset Query Strings',
91 - 'description' => 'Strip ?ver=X.Y from enqueued CSS / JS URLs. Some CDN caches and proxies cache better when query strings are absent.',
90 + 'label' => __( 'Remove Asset Query Strings', 'xspeed' ),
91 + 'description' => __( 'Strip ?ver=X.Y from enqueued CSS / JS URLs. Some CDN caches and proxies cache better when query strings are absent. Files under wp-content/uploads keep their version — page builders and consent plugins rewrite generated CSS there in place, and ?ver is what tells browsers to refetch it. Plugin, theme and core assets are still stripped: with Browser Cache on, an update reaches returning visitors only when their browser cache expires.', 'xspeed' ),
92 92 ),
93 93 'defer_js_excluded' => array(
94 94 'type' => 'list',
95 95 'default' => array( 'jquery-core', 'jquery-migrate' ),
96 96 'item_type' => 'string',
97 - 'label' => 'Defer / Delay Exclusions',
98 - 'description' => 'Script handles OR URL substrings that skip defer + delay. Defaults exclude jQuery (most themes depend on it being available synchronously). One per line.',
97 + 'label' => __( 'Defer / Delay Exclusions', 'xspeed' ),
98 + 'description' => __( 'Script handles OR URL substrings that skip defer + delay. Defaults exclude jQuery (most themes depend on it being available synchronously). One per line.', 'xspeed' ),
99 99 // Only relevant once defer OR delay is on — the exclusion list
100 100 // governs both. Uses the `any` (OR) dependency form. (FBS-82227)
101 101 'dependsOn' => array(
102 102 'any' => array(
@@ -108,10 +108,10 @@
108 108 'delay_js_targets' => array(
109 109 'type' => 'list',
110 110 'default' => array(),
111 111 'item_type' => 'string',
112 - 'label' => 'Delay Only These Scripts',
113 - 'description' => 'Script handles OR URL substrings. When non-empty, ONLY matching scripts are delayed — everything else loads normally. Leave empty to delay all scripts (minus the exclusions above). Ideal for postponing one heavy third-party embed without touching the rest of the page. Handles are the more reliable selector — a URL substring has to match the script\'s original URL, and minification rewrites that to a hashed cache path. One per line.',
112 + 'label' => __( 'Delay Only These Scripts', 'xspeed' ),
113 + 'description' => __( 'Script handles OR URL substrings. When non-empty, matching scripts are delayed, plus the known third-party tags xSpeed recognises on its own (analytics, tag managers, chat widgets, review embeds, error trackers) — so a heavy vendor script is postponed even when it is not listed here. Leave empty to delay all scripts (minus the exclusions above). Handles are the more reliable selector — a URL substring has to match the script\'s original URL, and minification rewrites that to a hashed cache path. One per line.', 'xspeed' ),
114 114 'dependsOn' => array( 'field' => 'delay_js' ),
115 115 ),
116 116 'delay_js_timeout' => array(
117 117 'type' => 'int',
@@ -117,24 +117,24 @@
117 117 'type' => 'int',
118 118 'default' => 8000,
119 119 'min' => 0,
120 120 'max' => 60000,
121 - 'label' => 'Delay Failsafe Timeout (ms)',
121 + 'label' => __( 'Delay Failsafe Timeout (ms)', 'xspeed' ),
122 122 'unit' => 'ms',
123 - 'description' => 'Load delayed scripts automatically after this many milliseconds when the visitor never interacts. Set to 0 for interaction-only, with no timer: a timer that fires inside a lab tool\'s measurement window loads the "delayed" scripts anyway and inflates the reported TTI. Keep a non-zero value if a delayed script must eventually run for visitors who never scroll, tap, or type.',
123 + 'description' => __( 'Load delayed scripts automatically after this many milliseconds when the visitor never interacts. Set to 0 for interaction-only, with no timer: a timer that fires inside a lab tool\'s measurement window loads the "delayed" scripts anyway and inflates the reported TTI. Keep a non-zero value if a delayed script must eventually run for visitors who never scroll, tap, or type.', 'xspeed' ),
124 124 'dependsOn' => array( 'field' => 'delay_js' ),
125 125 ),
126 126 'combine_css' => array(
127 127 'type' => 'bool',
128 128 'default' => false,
129 - 'label' => 'Combine CSS Files',
130 - 'description' => 'Concatenate enqueued local stylesheets into a single file (with @import and url(…) paths resolved). External CSS is left alone. Pairs poorly with HTTP/2 push — only enable on HTTP/1.1 hosts.',
129 + 'label' => __( 'Combine CSS Files', 'xspeed' ),
130 + 'description' => __( 'Concatenate enqueued local stylesheets into a single file (with @import and url(…) paths resolved). External CSS is left alone. Pairs poorly with HTTP/2 push — only enable on HTTP/1.1 hosts.', 'xspeed' ),
131 131 ),
132 132 'combine_js' => array(
133 133 'type' => 'bool',
134 134 'default' => false,
135 - 'label' => 'Combine JavaScript Files',
136 - 'description' => 'Concatenate enqueued local scripts into a single file. External scripts + scripts marked async / deferred are left alone. Disable if you hit dependency-order issues; the combiner respects WordPress enqueue order but inline scripts attached via wp_add_inline_script can shift behavior.',
135 + 'label' => __( 'Combine JavaScript Files', 'xspeed' ),
136 + 'description' => __( 'Concatenate enqueued local scripts into a single file. External scripts + scripts marked async / deferred are left alone. Disable if you hit dependency-order issues; the combiner respects WordPress enqueue order but inline scripts attached via wp_add_inline_script can shift behavior.', 'xspeed' ),
137 137 ),
138 138 );
139 139 }
140 140
@@ -216,8 +216,26 @@
216 216 * 2. Instantiate the v1 Minifier engine; it now reads from
217 217 * Settings_Manager::get('minify') via its updated read path.
218 218 */
219 219 public function boot(): void {
220 + /*
221 + * Deferred to `init`: both calls below read this module's settings,
222 + * which builds settings_schema(), whose labels go through __().
223 + * boot() runs on `plugins_loaded`, before `after_setup_theme` — the
224 + * earliest point WordPress 6.7+ considers safe to translate — so doing
225 + * it here fires _load_textdomain_just_in_time on every request and
226 + * resolves those labels against an unloaded domain.
227 + *
228 + * Every filter LegacyMinifier registers fires after `init`, so running
229 + * one hook later is equivalent.
230 + */
231 + add_action( 'init', array( $this, 'boot_on_init' ) );
232 + }
233 +
234 + /**
235 + * The real boot body — see boot() for why it runs on `init`.
236 + */
237 + public function boot_on_init(): void {
220 238 $this->seed_from_legacy_if_needed();
221 239 new LegacyMinifier();
222 240 }
223 241