Make WordPress Core

Ticket #14718: 14718.3.diff

File 14718.3.diff, 3.1 KB (added by nacin, 14 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() )