WordPress.org

Make WordPress Core

Ticket #14718: 14718.3.diff

File 14718.3.diff, 3.1 KB (added by nacin, 4 years ago)

Alternative patch that moves some work into ms-load.php

  • wp-includes/load.php

     
    472472        $plugins = array(); 
    473473        $active_plugins = (array) get_option( 'active_plugins', array() ); 
    474474 
    475         // Get active network plugins 
    476         if ( is_multisite() ) { 
    477                 $active_sitewide_plugins = (array) get_site_option( 'active_sitewide_plugins', array() ); 
    478                 if ( !empty($active_sitewide_plugins) ) { 
    479                         $active_plugins = array_merge( $active_plugins, array_keys( $active_sitewide_plugins ) ); 
    480                         sort( $active_plugins ); 
    481                 } 
    482         } 
    483  
    484475        // Check for hacks file if the option is enabled 
    485476        if ( get_option( 'hack_file' ) && file_exists( ABSPATH . 'my-hacks.php' ) ) { 
    486477                _deprecated_file( 'my-hacks.php', '1.5' ); 
     
    490481        if ( empty( $active_plugins ) || defined( 'WP_INSTALLING' ) ) 
    491482                return $plugins; 
    492483 
     484        $network_plugins = is_multisite() ? wp_get_active_network_plugins() : false; 
     485 
    493486        foreach ( $active_plugins as $plugin ) { 
    494487                if ( ! validate_file( $plugin ) // $plugin must validate as file 
    495488                        && '.php' == substr( $plugin, -4 ) // $plugin must end with '.php' 
    496489                        && file_exists( WP_PLUGIN_DIR . '/' . $plugin ) // $plugin must exist 
     490                        // not already included as a network plugin 
     491                        && ( ! $network_plugins || ! in_array( WP_PLUGIN_DIR . '/' . $plugin, $network_plugins ) ) 
    497492                        ) 
    498493                $plugins[] = WP_PLUGIN_DIR . '/' . $plugin; 
    499494        } 
  • wp-includes/ms-load.php

     
    2626} 
    2727 
    2828/** 
     29 * Returns array of network plugin files to be included in global scope. 
     30 * 
     31 * The default directory is wp-content/plugins. To change the default directory 
     32 * manually, define <code>WP_PLUGIN_DIR</code> and <code>WP_PLUGIN_URL</code> 
     33 * in wp-config.php. 
     34 * 
     35 * @access private 
     36 * @since 3.1.0 
     37 * @return array Files to include 
     38 */ 
     39function wp_get_active_network_plugins() { 
     40        $active_plugins = (array) get_site_option( 'active_sitewide_plugins', array() ); 
     41        if ( empty( $active_plugins ) ) 
     42                return array(); 
     43 
     44        $active_plugins = array_keys( $active_plugins ); 
     45        sort( $active_plugins ); 
     46 
     47        foreach ( $active_plugins as $plugin ) { 
     48                if ( ! validate_file( $plugin ) // $plugin must validate as file 
     49                        && '.php' == substr( $plugin, -4 ) // $plugin must end with '.php' 
     50                        && file_exists( WP_PLUGIN_DIR . '/' . $plugin ) // $plugin must exist 
     51                        ) 
     52                $plugins[] = WP_PLUGIN_DIR . '/' . $plugin; 
     53        } 
     54        return $plugins; 
     55} 
     56 
     57/** 
    2958 * Checks status of current blog. 
    3059 * 
    3160 * Checks if the blog is deleted, inactive, archived, or spammed. 
  • wp-settings.php

     
    152152} 
    153153unset( $mu_plugin ); 
    154154 
     155if ( is_multisite() ) { 
     156        foreach( wp_get_active_network_plugins() as $network_plugin ) { 
     157                include_once( $network_plugin ); 
     158        } 
     159        unset( $network_plugin ); 
     160} 
     161 
    155162do_action( 'muplugins_loaded' ); 
    156163 
    157164if ( is_multisite() )