Changeset 3481612
- Timestamp:
- 03/13/2026 01:41:45 AM (3 weeks ago)
- Location:
- super-admin-all-sites-menu
- Files:
-
- 4 added
- 8 edited
- 1 copied
-
tags/1.11.0 (copied) (copied from super-admin-all-sites-menu/trunk)
-
tags/1.11.0/build/index.asset.php (modified) (1 diff)
-
tags/1.11.0/build/index.js (modified) (1 diff)
-
tags/1.11.0/docs (added)
-
tags/1.11.0/docs/switch-free.md (added)
-
tags/1.11.0/readme.txt (modified) (2 diffs)
-
tags/1.11.0/super-admin-all-sites-menu.php (modified) (4 diffs)
-
trunk/build/index.asset.php (modified) (1 diff)
-
trunk/build/index.js (modified) (1 diff)
-
trunk/docs (added)
-
trunk/docs/switch-free.md (added)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/super-admin-all-sites-menu.php (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
super-admin-all-sites-menu/tags/1.11.0/build/index.asset.php
r3481584 r3481612 1 <?php return array('dependencies' => array('wp-api-fetch', 'wp-i18n'), 'version' => ' 858836a4af2aff25e4e4');1 <?php return array('dependencies' => array('wp-api-fetch', 'wp-i18n'), 'version' => '9e73d87177e6f0887ecc'); -
super-admin-all-sites-menu/tags/1.11.0/build/index.js
r3481584 r3481612 1 1 /*! 2 2 * super-admin-all-sites-menu 3 * version: 1.1 0.03 * version: 1.11.0 4 4 * address: https://github.com/soderlind/super-admin-all-sites-menu#readme 5 5 * author: Per Søderlind -
super-admin-all-sites-menu/tags/1.11.0/readme.txt
r3481584 r3481612 1 1 === Super Admin All Sites Menu === 2 Stable tag: 1.1 0.02 Stable tag: 1.11.0 3 3 Requires at least: 5.6 4 4 Tested up to: 7.0 … … 122 122 == Changelog == 123 123 124 = 1.11.0 = 125 * Performance: Replaced per-site WP_Site::get_details() calls with a single batch SQL query, eliminating hidden switch_to_blog() overhead in the REST endpoint 126 127 = 1.10.1 = 128 * Updated: @wordpress/scripts 30.7.0 → 31.6.0 129 * Updated: dexie 4.0.11 → 4.2.0 130 * Security: Resolved Dependabot alerts #102, #104, #108, #109 (minimatch ReDoS, serialize-javascript RCE, @tootallnate/once) 131 * Changed: Added npm overrides for transitive dependency vulnerabilities (0 audit findings) 132 124 133 = 1.10.0 = 125 134 * Added: Filterable per-site submenu items via `all_sites_menu_submenu_items` filter (#46) -
super-admin-all-sites-menu/tags/1.11.0/super-admin-all-sites-menu.php
r3481584 r3481612 13 13 * GitHub Plugin URI: https://github.com/soderlind/super-admin-all-sites-menu 14 14 * Description: For the super admin, replace WP Admin Bar My Sites menu with an All Sites menu. 15 * Version: 1.1 0.015 * Version: 1.11.0 16 16 * Author: Per Soderlind 17 17 * Network: true … … 349 349 ] 350 350 ); 351 352 // Batch-fetch blogname + siteurl for all sites in one query, 353 // avoiding per-site switch_to_blog() calls from WP_Site::get_details(). 354 $site_options = $this->batch_get_site_options( $sites ); 355 351 356 $menu = []; 352 357 $timestamp = $this->get_timestamp(); … … 354 359 355 360 $blogid = $site->blog_id; 356 $blogname = $site ->__get( 'blogname' );361 $blogname = $site_options[ $blogid ]['blogname'] ?? ''; 357 362 $menu_id = 'blog-' . $blogid; 358 363 $blavatar = '<div class="blavatar"></div>'; 359 $siteurl = $site ->__get( 'siteurl' );364 $siteurl = $site_options[ $blogid ]['siteurl'] ?? $site->siteurl; 360 365 $adminurl = $siteurl . '/wp-admin'; 361 366 … … 507 512 508 513 /** 514 * Batch-fetch blogname and siteurl for multiple sites in a single SQL query. 515 * 516 * Uses $wpdb->get_blog_prefix() (a pure function with no side effects) to 517 * build a UNION ALL query, avoiding the per-site switch_to_blog() calls 518 * that WP_Site::get_details() triggers internally. 519 * 520 * @param array $sites Array of WP_Site objects. 521 * @return array<int, array{blogname: string, siteurl: string}> Keyed by blog_id. 522 */ 523 private function batch_get_site_options( array $sites ): array { 524 if ( [] === $sites ) { 525 return []; 526 } 527 528 global $wpdb; 529 530 $union_parts = []; 531 foreach ( $sites as $site ) { 532 $prefix = $wpdb->get_blog_prefix( (int) $site->blog_id ); 533 $table = $prefix . 'options'; 534 $union_parts[] = $wpdb->prepare( 535 // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- table name is built from $wpdb->get_blog_prefix(). 536 "SELECT %d AS blog_id, option_name, option_value FROM {$table} WHERE option_name IN ('blogname','siteurl')", 537 (int) $site->blog_id 538 ); 539 } 540 541 // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- each part is prepared above. 542 $rows = $wpdb->get_results( implode( ' UNION ALL ', $union_parts ) ); 543 544 $options = []; 545 foreach ( $rows as $row ) { 546 $options[ (int) $row->blog_id ][ $row->option_name ] = $row->option_value; 547 } 548 549 return $options; 550 } 551 552 /** 509 553 * Get number of sites. 510 554 * -
super-admin-all-sites-menu/trunk/build/index.asset.php
r3481584 r3481612 1 <?php return array('dependencies' => array('wp-api-fetch', 'wp-i18n'), 'version' => ' 858836a4af2aff25e4e4');1 <?php return array('dependencies' => array('wp-api-fetch', 'wp-i18n'), 'version' => '9e73d87177e6f0887ecc'); -
super-admin-all-sites-menu/trunk/build/index.js
r3481584 r3481612 1 1 /*! 2 2 * super-admin-all-sites-menu 3 * version: 1.1 0.03 * version: 1.11.0 4 4 * address: https://github.com/soderlind/super-admin-all-sites-menu#readme 5 5 * author: Per Søderlind -
super-admin-all-sites-menu/trunk/readme.txt
r3481584 r3481612 1 1 === Super Admin All Sites Menu === 2 Stable tag: 1.1 0.02 Stable tag: 1.11.0 3 3 Requires at least: 5.6 4 4 Tested up to: 7.0 … … 122 122 == Changelog == 123 123 124 = 1.11.0 = 125 * Performance: Replaced per-site WP_Site::get_details() calls with a single batch SQL query, eliminating hidden switch_to_blog() overhead in the REST endpoint 126 127 = 1.10.1 = 128 * Updated: @wordpress/scripts 30.7.0 → 31.6.0 129 * Updated: dexie 4.0.11 → 4.2.0 130 * Security: Resolved Dependabot alerts #102, #104, #108, #109 (minimatch ReDoS, serialize-javascript RCE, @tootallnate/once) 131 * Changed: Added npm overrides for transitive dependency vulnerabilities (0 audit findings) 132 124 133 = 1.10.0 = 125 134 * Added: Filterable per-site submenu items via `all_sites_menu_submenu_items` filter (#46) -
super-admin-all-sites-menu/trunk/super-admin-all-sites-menu.php
r3481584 r3481612 13 13 * GitHub Plugin URI: https://github.com/soderlind/super-admin-all-sites-menu 14 14 * Description: For the super admin, replace WP Admin Bar My Sites menu with an All Sites menu. 15 * Version: 1.1 0.015 * Version: 1.11.0 16 16 * Author: Per Soderlind 17 17 * Network: true … … 349 349 ] 350 350 ); 351 352 // Batch-fetch blogname + siteurl for all sites in one query, 353 // avoiding per-site switch_to_blog() calls from WP_Site::get_details(). 354 $site_options = $this->batch_get_site_options( $sites ); 355 351 356 $menu = []; 352 357 $timestamp = $this->get_timestamp(); … … 354 359 355 360 $blogid = $site->blog_id; 356 $blogname = $site ->__get( 'blogname' );361 $blogname = $site_options[ $blogid ]['blogname'] ?? ''; 357 362 $menu_id = 'blog-' . $blogid; 358 363 $blavatar = '<div class="blavatar"></div>'; 359 $siteurl = $site ->__get( 'siteurl' );364 $siteurl = $site_options[ $blogid ]['siteurl'] ?? $site->siteurl; 360 365 $adminurl = $siteurl . '/wp-admin'; 361 366 … … 507 512 508 513 /** 514 * Batch-fetch blogname and siteurl for multiple sites in a single SQL query. 515 * 516 * Uses $wpdb->get_blog_prefix() (a pure function with no side effects) to 517 * build a UNION ALL query, avoiding the per-site switch_to_blog() calls 518 * that WP_Site::get_details() triggers internally. 519 * 520 * @param array $sites Array of WP_Site objects. 521 * @return array<int, array{blogname: string, siteurl: string}> Keyed by blog_id. 522 */ 523 private function batch_get_site_options( array $sites ): array { 524 if ( [] === $sites ) { 525 return []; 526 } 527 528 global $wpdb; 529 530 $union_parts = []; 531 foreach ( $sites as $site ) { 532 $prefix = $wpdb->get_blog_prefix( (int) $site->blog_id ); 533 $table = $prefix . 'options'; 534 $union_parts[] = $wpdb->prepare( 535 // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- table name is built from $wpdb->get_blog_prefix(). 536 "SELECT %d AS blog_id, option_name, option_value FROM {$table} WHERE option_name IN ('blogname','siteurl')", 537 (int) $site->blog_id 538 ); 539 } 540 541 // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- each part is prepared above. 542 $rows = $wpdb->get_results( implode( ' UNION ALL ', $union_parts ) ); 543 544 $options = []; 545 foreach ( $rows as $row ) { 546 $options[ (int) $row->blog_id ][ $row->option_name ] = $row->option_value; 547 } 548 549 return $options; 550 } 551 552 /** 509 553 * Get number of sites. 510 554 *
Note: See TracChangeset
for help on using the changeset viewer.