WordPress.org

Make WordPress Core

Ticket #13743: 13743.11.patch

File 13743.11.patch, 8.3 KB (added by Mista-Flo, 2 years ago)
  • wp-admin/includes/class-wp-ms-themes-list-table.php

    diff --git wp-admin/includes/class-wp-ms-themes-list-table.php wp-admin/includes/class-wp-ms-themes-list-table.php
    index ea6969f..b8d4aad 100644
    class WP_MS_Themes_List_Table extends WP_List_Table { 
    4545                );
    4646
    4747                $status = isset( $_REQUEST['theme_status'] ) ? $_REQUEST['theme_status'] : 'all';
    48                 if ( ! in_array( $status, array( 'all', 'enabled', 'disabled', 'upgrade', 'search', 'broken' ) ) ) {
     48                if ( ! in_array( $status, array( 'all', 'enabled', 'disabled', 'upgrade', 'search', 'broken', 'default' ) ) ) {
    4949                        $status = 'all';
    5050                }
    5151
    class WP_MS_Themes_List_Table extends WP_List_Table { 
    105105                        'disabled' => array(),
    106106                        'upgrade'  => array(),
    107107                        'broken'   => $this->is_site_themes ? array() : wp_get_themes( array( 'errors' => true ) ),
     108                        'default'  => array( wp_get_theme( WP_Theme::network_get_default_theme() ) ),
    108109                );
    109110
    110111                if ( $this->is_site_themes ) {
    class WP_MS_Themes_List_Table extends WP_List_Table { 
    311312                                case 'broken':
    312313                                        $text = _n( 'Broken <span class="count">(%s)</span>', 'Broken <span class="count">(%s)</span>', $count );
    313314                                        break;
     315                                case 'default':
     316                                        $text = __( 'Default' ) . ' <span class="count">(1)</span>';
     317                                        break;
    314318                        }
    315319
    316320                        if ( $this->is_site_themes ) {
    class WP_MS_Themes_List_Table extends WP_List_Table { 
    410414                        'enable'  => '',
    411415                        'disable' => '',
    412416                        'delete'  => '',
     417                        'default' => '',
    413418                );
    414419
    415420                $stylesheet = $theme->get_stylesheet();
    class WP_MS_Themes_List_Table extends WP_List_Table { 
    442447                                );
    443448                        }
    444449                } else {
    445                         $url = add_query_arg(
    446                                 array(
    447                                         'action' => 'disable',
    448                                         'theme'  => $theme_key,
    449                                         'paged'  => $page,
    450                                         's'      => $s,
    451                                 ), $url
    452                         );
     450                        // Set default theme raw action
     451                        if ( $theme->get_stylesheet() !== WP_Theme::network_get_default_theme() ) {
     452                                $url = add_query_arg(
     453                                        array(
     454                                                'action' => 'disable',
     455                                                'theme'  => $theme_key,
     456                                                'paged'  => $page,
     457                                                's'      => $s,
     458                                        ), $url
     459                                );
    453460
    454                         if ( $this->is_site_themes ) {
    455                                 /* translators: %s: theme name */
    456                                 $aria_label = sprintf( __( 'Disable %s' ), $theme->display( 'Name' ) );
    457                         } else {
    458                                 /* translators: %s: theme name */
    459                                 $aria_label = sprintf( __( 'Network Disable %s' ), $theme->display( 'Name' ) );
    460                         }
     461                                if ( $this->is_site_themes ) {
     462                                        /* translators: %s: theme name */
     463                                        $aria_label = sprintf( __( 'Disable %s' ), $theme->display( 'Name' ) );
     464                                } else {
     465                                        /* translators: %s: theme name */
     466                                        $aria_label = sprintf( __( 'Network Disable %s' ), $theme->display( 'Name' ) );
     467                                }
    461468
    462                         $actions['disable'] = sprintf(
    463                                 '<a href="%s" aria-label="%s">%s</a>',
    464                                 esc_url( wp_nonce_url( $url, 'disable-theme_' . $stylesheet ) ),
    465                                 esc_attr( $aria_label ),
    466                                 ( $this->is_site_themes ? __( 'Disable' ) : __( 'Network Disable' ) )
    467                         );
     469                                $actions['disable'] = sprintf(
     470                                        '<a href="%s" aria-label="%s">%s</a>',
     471                                        esc_url( wp_nonce_url( $url, 'disable-theme_' . $stylesheet ) ),
     472                                        esc_attr( $aria_label ),
     473                                        ( $this->is_site_themes ? __( 'Disable' ) : __( 'Network Disable' ) )
     474                                );
     475
     476                                // Set network default theme
     477                                $url = add_query_arg( array(
     478                                        'action'       => 'default',
     479                                        'theme'        => $theme_key,
     480                                        'theme_status' => $context,
     481                                        'paged'        => $page,
     482                                        's'            => $s,
     483                                ), $url );
     484
     485                                $actions['default'] = sprintf( '<a href="%s" aria-label="%s">%s</a>',
     486                                        esc_url( wp_nonce_url( $url, 'default-theme_' . $stylesheet ) ),
     487                                        esc_attr( sprintf( __( 'Make Default %s' ), $theme->display( 'Name' ) ) ),
     488                                        __( 'Make Default' )
     489                                );
     490                        }
    468491                }
    469492
    470493                if ( ! $allowed && current_user_can( 'delete_themes' ) && ! $this->is_site_themes && $stylesheet != get_option( 'stylesheet' ) && $stylesheet != get_option( 'template' ) ) {
    class WP_MS_Themes_List_Table extends WP_List_Table { 
    665688                                                if ( $stylesheet !== $template && $item->get_stylesheet() === $stylesheet ) {
    666689                                                        $active_theme_label = ' &mdash; ' . __( 'Active Child Theme' );
    667690                                                }
     691
     692                                                /* In case this is the network default theme */
     693                                                if ( $item->get_stylesheet() === $item->network_get_default_theme() ) {
     694                                                        $active_theme_label = ' &mdash; ' . __( 'Default Theme' );
     695                                                }
    668696                                        }
    669697
    670                                         echo "<td class='theme-title column-primary{$extra_classes}'><strong>" . $item->display( 'Name' ) . $active_theme_label . '</strong>';
     698                                        printf( "<td class='theme-title column-primary%s'><strong>%s%s</strong>",
     699                                                $extra_classes,
     700                                                $item->display( 'Name' ),
     701                                                $active_theme_label
     702                                        );
    671703
    672704                                        $this->column_name( $item );
    673705
  • wp-admin/includes/schema.php

    diff --git wp-admin/includes/schema.php wp-admin/includes/schema.php
    index edba697..99455a4 100644
    function populate_options() { 
    370370                $uploads_use_yearmonth_folders = 1;
    371371        }
    372372
    373         // If WP_DEFAULT_THEME doesn't exist, fall back to the latest core default theme.
    374373        $stylesheet = $template = WP_DEFAULT_THEME;
    375         $theme      = wp_get_theme( WP_DEFAULT_THEME );
    376         if ( ! $theme->exists() ) {
    377                 $theme = WP_Theme::get_core_default_theme();
     374
     375        // If it's multisite and WP_DEFAULT_THEME is not redifined in WP Config, get the network default theme
     376        if ( is_multisite() ) {
     377                $default_theme = WP_Theme::network_get_default_theme();
     378                if ( ! empty( $default_theme ) ) {
     379                        $theme = wp_get_theme( $default_theme );
     380                }
    378381        }
    379382
    380383        // If we can't find a core default theme, WP_DEFAULT_THEME is the best we can do.
    381         if ( $theme ) {
     384        if ( empty ( $theme ) || ! $theme->exists() ) {
     385                $theme = wp_get_theme( WP_DEFAULT_THEME );
     386
     387                // If WP_DEFAULT_THEME doesn't exist, fall back to the latest core default theme.
     388                if ( ! $theme->exists() ) {
     389                        $theme = WP_Theme::get_core_default_theme();
     390                }
     391        }
     392 
     393        // Fetch stylesheet and template corresponding to the fetched theme
     394        if ( ! empty ( $theme ) && $theme->exists() ) {
    382395                $stylesheet = $theme->get_stylesheet();
    383396                $template   = $theme->get_template();
    384397        }
  • wp-admin/network/themes.php

    diff --git wp-admin/network/themes.php wp-admin/network/themes.php
    index fbfa8b4..7deb81b 100644
    if ( $action ) { 
    4242                        WP_Theme::network_disable_theme( $_GET['theme'] );
    4343                        wp_safe_redirect( add_query_arg( 'disabled', '1', $referer ) );
    4444                        exit;
     45                case 'default':
     46                        check_admin_referer( 'default-theme_' . $_GET['theme'] );
     47                        WP_Theme::network_set_default_theme( $_GET['theme'] );
     48                        wp_safe_redirect( add_query_arg( 'default', '1', $referer ) );
     49                        exit;
    4550                case 'enable-selected':
    4651                        check_admin_referer( 'bulk-themes' );
    4752                        $themes = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array();
    if ( isset( $_GET['enabled'] ) ) { 
    295300                $message = _n( '%s theme disabled.', '%s themes disabled.', $disabled );
    296301        }
    297302        echo '<div id="message" class="updated notice is-dismissible"><p>' . sprintf( $message, number_format_i18n( $disabled ) ) . '</p></div>';
     303} elseif ( isset( $_GET['default'] ) ) {
     304    $message = __( 'Network default theme has been set.' );
     305    echo '<div id="message" class="updated notice is-dismissible"><p>' . $message . '</p></div>';
    298306} elseif ( isset( $_GET['deleted'] ) ) {
    299307        $deleted = absint( $_GET['deleted'] );
    300308        if ( 1 == $deleted ) {
  • wp-includes/class-wp-theme.php

    diff --git wp-includes/class-wp-theme.php wp-includes/class-wp-theme.php
    index 683065c..3bba5ee 100644
    final class WP_Theme implements ArrayAccess { 
    15471547        }
    15481548
    15491549        /**
     1550         * Set the network default theme.
     1551         *
     1552         * @since 5.0.0
     1553         * @access public
     1554         * @static
     1555         *
     1556         * @param string $stylesheet name.
     1557         */
     1558        public static function network_set_default_theme( $stylesheet ) {
     1559                if ( ! is_multisite() ) {
     1560                        return;
     1561                }
     1562
     1563                $theme = wp_get_theme( $stylesheet );
     1564                if ( ! $theme->exists() || ! $theme->is_allowed() ) {
     1565                        return;
     1566                }
     1567
     1568                update_network_option( null, 'default_theme', $stylesheet );
     1569        }
     1570
     1571        /**
     1572         * Get the network default theme.
     1573         *
     1574         * @since 5.0.0
     1575         * @access public
     1576         * @static
     1577         */
     1578        public static function network_get_default_theme() {
     1579                return get_network_option( null, 'default_theme', WP_DEFAULT_THEME );
     1580        }
     1581
     1582        /**
    15501583         * Sorts themes by name.
    15511584         *
    15521585         * @since 3.4.0