PluginProbe
WDesignKit – AI Templates, Widget Builder & MCP Workflow / 2.6.6
WDesignKit – AI Templates, Widget Builder & MCP Workflow v2.6.6
2.6.6 2.6.5 2.6.4 2.6.3 2.6.2 2.6.1 2.6.0 2.5.5 2.5.4 2.5.3 2.5.2 2.5.1 2.5.0 2.4.0 2.3.3 2.3.2 2.3.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 All 128 releases
← All changes | includes/admin/class-wdkit-enqueue.php +93 -32 2.6.02.6.6 View file →
@@ -83,9 +83,21 @@
83 83 *
84 84 * @since 1.0.0
85 85 * @return void
86 86 */
87 - public function wdkit_enqueue_styles_library() {
87 + public function wdkit_enqueue_styles_library( $hook = '' ) {
88 + // Hooked on admin_enqueue_scripts with no screen check at all, so this loaded the icon
89 + // font on every wp-admin screen (ClickUp 86d41cnze). admin_enqueue_scripts passes the
90 + // screen hook as its first argument, so the same guard wdkit_admin_scripts() uses can
91 + // apply here. Kept as a separate handle from 'wdkit-library-preview' — both point at the
92 + // same stylesheet, and deduplicating the handles is a separate change.
93 + $is_nexter_page = isset( $_GET['page'] ) && sanitize_key( wp_unslash( $_GET['page'] ) ) === 'nxt_code_snippets';
94 + $is_theme_builder_page = ( isset( $_GET['post_type'] ) && sanitize_key( wp_unslash( $_GET['post_type'] ) ) === 'nxt_builder' ) || ( isset( $_GET['page'] ) && sanitize_key( wp_unslash( $_GET['page'] ) ) === 'nxt_builder' );
95 +
96 + if ( ! in_array( $hook, array( 'toplevel_page_wdesign-kit', 'elementor', 'post-new.php', 'post.php' ), true ) && ! $is_nexter_page && ! $is_theme_builder_page ) {
97 + return;
98 + }
99 +
88 100 wp_enqueue_style( 'wdkit-library', WDKIT_URL . 'assets/fonts/style.css', array(), WDKIT_VERSION, false );
89 101 }
90 102
91 103 /**
@@ -215,9 +227,13 @@
215 227 * @param string $hook use for check page type.
216 228 */
217 229 public function wdkit_admin_scripts( $hook ) {
218 230
219 - wp_enqueue_style( 'wdkit-library-preview', WDKIT_URL . 'assets/fonts/style.css', array(), WDKIT_VERSION, false );
231 + // Deliberately BEFORE the screen guard below: this 1.4 KB stylesheet contains nothing but
232 + // #adminmenu rules for the WDesignKit menu item, and the admin menu is rendered on every
233 + // admin screen. Gating it to WDesignKit's own screens leaves the menu icon unstyled
234 + // everywhere else — the masked-SVG ::before never applies, so the raw <img> shows through.
235 + // Do not "optimise" this into the guard (ClickUp 86d41cnze).
220 236 wp_enqueue_style( 'wdkit-out-dashborad', WDKIT_URL . 'assets/css/dashborad/wdkit-dashborad.css', array(), WDKIT_VERSION, false );
221 237
222 238 $page = isset( $_GET['page'] ) ? sanitize_key( wp_unslash( $_GET['page'] ) ) : '';
223 239 $ptype = isset( $_GET['post_type'] ) ? sanitize_key( wp_unslash( $_GET['post_type'] ) ) : '';
@@ -226,15 +242,21 @@
226 242 $is_nexter_page = isset( $_GET['page'] ) && sanitize_key( wp_unslash( $_GET['page'] ) ) === 'nxt_code_snippets';
227 243
228 244 // Check if we're on a Theme Builder page (via post_type or page parameter)
229 245 $is_theme_builder_page = ( isset( $_GET['post_type'] ) && sanitize_key( wp_unslash( $_GET['post_type'] ) ) === 'nxt_builder' ) || ( isset( $_GET['page'] ) && sanitize_key( wp_unslash( $_GET['page'] ) ) === 'nxt_builder' );
230 -
246 +
231 247 if ( ! in_array( $hook, array( 'toplevel_page_wdesign-kit', 'elementor', 'post-new.php', 'post.php' ), true ) && !$is_nexter_page && !$is_theme_builder_page ) {
232 248 return;
233 249 }
234 250
235 - wp_enqueue_media();
251 + // Moved BELOW the screen guard: this is the 9 KB WDesignKit icon font, used only by
252 + // WDesignKit's own UI (no #adminmenu rules in it), yet it was enqueued on every wp-admin
253 + // screen — dashboard, posts list, media library, plugins page (ClickUp 86d41cnze).
254 + // The admin-menu stylesheet is NOT gated here; see the note at the top of this method.
255 + wp_enqueue_style( 'wdkit-library-preview', WDKIT_URL . 'assets/fonts/style.css', array(), WDKIT_VERSION, false );
236 256
257 + wp_enqueue_media();
258 +
237 259 $this->wdkit_enqueue_scripts( $hook );
238 260 $this->wdkit_enqueue_styles();
239 261 }
240 262
@@ -279,14 +301,14 @@
279 301 * translation data) load first.
280 302 */
281 303 $script_deps = $asset['dependencies'];
282 304 if ( file_exists( WDKIT_PATH . 'build/wdk-i18n-strings.js' ) ) {
283 - wp_enqueue_script( 'wdkit-editor-i18n', WDKIT_URL . 'build/wdk-i18n-strings.js', array( 'wp-i18n' ), $asset['version'], true );
305 + wp_enqueue_script( 'wdkit-editor-i18n', WDKIT_URL . 'build/wdk-i18n-strings.js', array( 'wp-i18n' ), $asset['version'], array( 'in_footer' => true, 'strategy' => 'defer' ) );
284 306 wp_set_script_translations( 'wdkit-editor-i18n', 'wdesignkit' );
285 307 $script_deps = array_merge( $script_deps, array( 'wdkit-editor-i18n' ) );
286 308 }
287 309
288 - wp_enqueue_script( 'wdkit-editor-js', WDKIT_URL . 'build/index.min.js', $script_deps, $asset['version'], true );
310 + wp_enqueue_script( 'wdkit-editor-js', WDKIT_URL . 'build/index.min.js', $script_deps, $asset['version'], array( 'in_footer' => true, 'strategy' => 'defer' ) );
289 311 wp_set_script_translations( 'wdkit-editor-js', 'wdesignkit' );
290 312
291 313 $onbording_end = get_option( $this->wdkit_onbording_end );
292 314 $white_label = get_option( 'wkit_white_label', false );
@@ -295,43 +317,82 @@
295 317 wp_localize_script(
296 318 'wdkit-editor-js',
297 319 'wdkitData',
298 320 array(
299 - 'ajax_url' => admin_url( 'admin-ajax.php' ),
300 - 'WDKIT_URL' => WDKIT_URL,
301 - 'WDKIT_ASSETS' => WDKIT_ASSETS,
302 - 'wdkit_server_url' => WDKIT_SERVER_SITE_URL,
303 - 'wdkit_site_api_url' => WDKIT_SERVER_API_URL,
304 - 'wdkit_wp_version' => get_bloginfo( 'version' ),
305 - 'home_url' => esc_url( home_url( '/' ) ),
306 - 'kit_nonce' => wp_create_nonce( 'wdkit_nonce' ),
307 - 'post_id' => get_the_ID(),
308 - 'post_type' => get_post_type(),
309 - 'text_domain' => WDKIT_TEXT_DOMAIN,
310 - 'use_editor' => $this->wdkit_use_editor(),
311 - 'post_type_list' => $this->wdkit_get_post_type_list(),
312 - 'WDKIT_onbording_end' => $onbording_end,
313 - 'wdkit_white_label' => $white_label,
314 - 'WDKIT_dark_mode' => $dark_mode,
321 + 'ajax_url' => admin_url( 'admin-ajax.php' ),
322 + 'WDKIT_URL' => WDKIT_URL,
323 + 'WDKIT_ASSETS' => WDKIT_ASSETS,
324 + 'wdkit_server_url' => WDKIT_SERVER_SITE_URL,
325 + 'wdkit_site_api_url' => WDKIT_SERVER_API_URL,
326 + 'wdkit_wp_version' => get_bloginfo( 'version' ),
327 + 'home_url' => esc_url( home_url( '/' ) ),
328 + 'kit_nonce' => wp_create_nonce( 'wdkit_nonce' ),
329 + 'post_id' => get_the_ID(),
330 + 'post_type' => get_post_type(),
331 + 'text_domain' => WDKIT_TEXT_DOMAIN,
332 + 'use_editor' => $this->wdkit_use_editor(),
333 + 'post_type_list' => $this->wdkit_get_post_type_list(),
334 + 'WDKIT_onbording_end' => $onbording_end,
335 + 'wdkit_white_label' => $white_label,
336 + 'WDKIT_dark_mode' => $dark_mode,
315 337 /** Widget Builder — public URL only, no server filesystem paths */
316 - 'WDKIT_SITE_URL' => WDKIT_GET_SITE_URL,
317 - 'WDKIT_DOC_URL' => WDKIT_DOCUMENT,
318 - 'WDKIT_SERVER_PATH' => WDKIT_SERVER_PATH,
319 - 'WDKIT_VERSION' => WDKIT_VERSION,
338 + 'WDKIT_SITE_URL' => WDKIT_GET_SITE_URL,
339 + 'WDKIT_DOC_URL' => WDKIT_DOCUMENT,
340 + 'WDKIT_SERVER_PATH' => WDKIT_SERVER_PATH,
341 + 'WDKIT_VERSION' => WDKIT_VERSION,
320 342
321 - 'gutenberg_template' => Wdkit_Wdesignkit::wdkit_is_compatible( 'gutenberg_template', 'template' )
343 + 'gutenberg_template' => Wdkit_Wdesignkit::wdkit_is_compatible( 'gutenberg_template', 'template' ),
344 +
345 + /**
346 + * Data Sharing switcher, Settings panel.
347 + *
348 + * Read as a SITE option — the consent is one answer per install, not per blog. The
349 + * class guard matches the one in wdesignkit.php: on a white-labelled install, or when
350 + * a sibling POSIMYTH plugin's SDK copy won the loader, the tracker class is never
351 + * declared and the constant reference would fatal.
352 + *
353 + * Both references are root-namespaced. This file lives in wdkit\WdKit_enqueue while
354 + * the SDK class is declared in the global namespace: a string class name is always
355 + * global so the guard passed either way, but an unprefixed `Posimyth_Tracker_WDK::`
356 + * resolves against THIS namespace and fatals on every admin page load.
357 + */
358 + 'wdkit_data_sharing' => class_exists( '\Posimyth_Tracker_WDK' ) ? (bool) get_site_option( \Posimyth_Tracker_WDK::OPT_IN_OPTION, false ) : false,
359 + 'wdkit_consent_nonce' => wp_create_nonce( 'posimyth_consent_wdk' ),
360 +
361 + /**
362 + * Whether the Data Sharing card may be shown at all.
363 + *
364 + * Tracks the tracker class rather than the white-label flag: a rebranded install now
365 + * keeps the feature (see wdesignkit.php), so this is false only when the SDK genuinely
366 + * failed to load — a sibling POSIMYTH plugin winning the loader with a diverged copy.
367 + * Rendering a switch in that case would offer a save with no handler behind it.
368 + *
369 + * Separate from wdkit_data_sharing on purpose: that one is false both when sharing is
370 + * off and when the feature is absent, which cannot tell the two apart.
371 + */
372 + 'wdkit_data_sharing_available' => class_exists( '\Posimyth_Tracker_WDK' ),
373 +
374 + /**
375 + * Reseller's product name, for the Data Sharing copy that would otherwise say
376 + * "WDesignKit" on a plugin they have rebranded as their own.
377 + */
378 + 'wdkit_data_sharing_name' => ! empty( $white_label['plugin_name'] ) ? $white_label['plugin_name'] : 'WDesignKit',
379 +
380 + /** help_link is the reseller's "hide POSIMYTH documentation links" switch. */
381 + 'wdkit_data_sharing_docs' => empty( $white_label['help_link'] ) ? WDKIT_DOCUMENT . 'data-sharing/' : ''
322 382 )
323 383 );
324 384
325 385 /**Ace Editor files for Widget-builder */
326 386 if ( 'toplevel_page_wdesign-kit' === $hook && Wdkit_Wdesignkit::wdkit_is_compatible( 'builder', 'widget' ) ) {
327 - wp_enqueue_script( 'widgetBuilder-script-editor-js', WDKIT_URL . 'assets/js/extra/ace.min.js', array( 'wp-element' ), WDKIT_VERSION, true );
328 - wp_enqueue_script( 'widgetBuilder-script-editor-cobalt', WDKIT_URL . 'assets/js/extra/theme-cobalt.js', array( 'wp-element' ), WDKIT_VERSION, true );
329 - wp_enqueue_script( 'widgetBuilder-script-editor-html', WDKIT_URL . 'assets/js/extra/mode-html.js', array( 'wp-element' ), WDKIT_VERSION, true );
387 + wp_enqueue_script( 'widgetBuilder-script-editor-js', WDKIT_URL . 'assets/js/extra/ace.min.js', array( 'wp-element' ), WDKIT_VERSION, array( 'in_footer' => true, 'strategy' => 'defer' ) );
388 + wp_enqueue_script( 'widgetBuilder-script-editor-cobalt', WDKIT_URL . 'assets/js/extra/theme-cobalt.js', array( 'wp-element' ), WDKIT_VERSION, array( 'in_footer' => true, 'strategy' => 'defer' ) );
389 + wp_enqueue_script( 'widgetBuilder-script-editor-html', WDKIT_URL . 'assets/js/extra/mode-html.js', array( 'wp-element' ), WDKIT_VERSION, array( 'in_footer' => true, 'strategy' => 'defer' ) );
330 390 }
331 391
332 392 if ( 'elementor' === $hook && Wdkit_Wdesignkit::wdkit_is_compatible( 'elementor_template', 'template' ) ) {
333 - wp_enqueue_script( 'wdkit-frontend-editor', WDKIT_ASSETS . '/js/main/elementor/elementor-editor.js', array( 'jquery', 'wp-i18n' ), WDKIT_VERSION, true );
393 + wp_enqueue_script( 'wdkit-frontend-editor', WDKIT_ASSETS . 'js/main/elementor/elementor-editor.js', array( 'jquery', 'wp-i18n' ), WDKIT_VERSION, array( 'in_footer' => true, 'strategy' => 'defer' ) );
394 + wp_set_script_translations( 'wdkit-frontend-editor', 'wdesignkit' );
334 395 $this->wdkit_cross_copy_paste_script( 'elementor' );
335 396 }
336 397 }
337 398
@@ -373,9 +434,9 @@
373 434 $deps[] = 'wp-blocks';
374 435 $deps[] = 'wp-dom-ready';
375 436 }
376 437
377 - wp_enqueue_script( 'wdkit-cross-copy-paste', WDKIT_ASSETS . '/js/main/wdkit-cross-copy-paste.js', $deps, WDKIT_VERSION, true );
438 + wp_enqueue_script( 'wdkit-cross-copy-paste', WDKIT_ASSETS . 'js/main/wdkit-cross-copy-paste.js', $deps, WDKIT_VERSION, array( 'in_footer' => true, 'strategy' => 'defer' ) );
378 439 wp_set_script_translations( 'wdkit-cross-copy-paste', 'wdesignkit' );
379 440 wp_localize_script(
380 441 'wdkit-cross-copy-paste',
381 442 'wdkitCrossCopyPaste',