Introduce WP_Theme, wp_get_themes(), and wp_get_theme() to replace get_themes(), get_theme(), get_theme_data(), current_theme_info(), and others.
* Getters and Helpers: Introduces a series of methods to allow for easy generation of headers for display, and other theme metadata, including page templates. * Screenshots: Handles support for multiple screenshots. (see # Additional screenshots must be PNG and start with screenshot-2.png, and be sequential to be counted. see #19816. * Error Handling: Broken themes have a WP_Error object attached to them. * Caching: Introduces a wp_cache_themes_persistently filter (also in [20020]) to enable persistent caching of all filesystem and sanitization operations normally handled by WP_Theme (and formerly get_file_data() and get_themes()). Themes are cached individually and across five different cache keys for different data pieces. * Compatibility: A WP_Theme object is backwards compatible with a theme's array formerly returned by get_themes() and get_theme(), and an stdClass object formerly returned by current_theme_info(). * i18n/L10n: Theme headers are now localizable with proper Text Domain and Domain Path headers, like plugins. (Language packs may remove the requirement for headers.) For page templates, see #6007 (not fixed yet, but will be easy now). For headers, fixes #15858. * PHP and CSS files: New methods that fetch a list of theme files (for the theme editor) only on demand, rather than only loading them into memory. fixes #11214. Functions deprecated: * get_themes(), get_allowed_themes() and get_broken_themes() -- use wp_get_themes() * get_theme() and current_theme_info() -- use wp_get_theme() * get_site_allowed_themes() -- use WP_Theme::get_allowed_on_network() * wpmu_get_blog_allowedthemes() -- use WP_theme::get_allowed_on_site() see also [20016], [20018], [20019], [20020], [20021], [20022], [20025], [20026], [20027]. also fixes #19244. see #20103. git-svn-id: http://svn.automattic.com/wordpress/trunk@20029 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
f596a23899
commit
d130a63e25
|
@ -50,52 +50,40 @@ class WP_MS_Themes_List_Table extends WP_List_Table {
|
|||
}
|
||||
|
||||
function prepare_items() {
|
||||
global $status, $themes, $totals, $page, $orderby, $order, $s;
|
||||
global $status, $totals, $page, $orderby, $order, $s;
|
||||
|
||||
wp_reset_vars( array( 'orderby', 'order', 's' ) );
|
||||
|
||||
$themes = array(
|
||||
'all' => apply_filters( 'all_themes', get_themes() ),
|
||||
'all' => apply_filters( 'all_themes', wp_get_themes() ),
|
||||
'search' => array(),
|
||||
'enabled' => array(),
|
||||
'disabled' => array(),
|
||||
'upgrade' => array()
|
||||
);
|
||||
|
||||
$site_allowed_themes = get_site_allowed_themes();
|
||||
if ( !$this->is_site_themes ) {
|
||||
$allowed_themes = $site_allowed_themes;
|
||||
$themes_per_page = $this->get_items_per_page( 'themes_network_per_page' );
|
||||
} else {
|
||||
$allowed_themes = wpmu_get_blog_allowedthemes( $this->site_id );
|
||||
if ( $this->is_site_themes ) {
|
||||
$themes_per_page = $this->get_items_per_page( 'site_themes_network_per_page' );
|
||||
$allowed_where = 'site';
|
||||
} else {
|
||||
$themes_per_page = $this->get_items_per_page( 'themes_network_per_page' );
|
||||
$allowed_where = 'network';
|
||||
}
|
||||
|
||||
$current = get_site_transient( 'update_themes' );
|
||||
$current = current_user_can( 'update_themes' ) && ! $this->is_site_themes && get_site_transient( 'update_themes' );
|
||||
|
||||
foreach ( (array) $themes['all'] as $key => $theme ) {
|
||||
$theme_key = $theme['Stylesheet'];
|
||||
|
||||
if ( isset( $allowed_themes [ $theme_key ] ) ) {
|
||||
$themes['all'][$key]['enabled'] = true;
|
||||
$themes['enabled'][$key] = $themes['all'][$key];
|
||||
}
|
||||
else {
|
||||
$themes['all'][$key]['enabled'] = false;
|
||||
$themes['disabled'][$key] = $themes['all'][$key];
|
||||
}
|
||||
if ( isset( $current->response[ $theme['Template'] ] ) )
|
||||
$themes['upgrade'][$key] = $themes['all'][$key];
|
||||
|
||||
if ( $this->is_site_themes && isset( $site_allowed_themes[$theme_key] ) ) {
|
||||
unset( $themes['all'][$key] );
|
||||
unset( $themes['enabled'][$key] );
|
||||
unset( $themes['disabled'][$key] );
|
||||
}
|
||||
if ( $this->is_site_themes && $theme->is_allowed( 'network' ) ) {
|
||||
unset( $themes['all'][ $key ] );
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( !current_user_can( 'update_themes' ) || $this->is_site_themes )
|
||||
$themes['upgrade'] = array();
|
||||
$filter = $theme->is_allowed( $allowed_where, $this->site_id ) ? 'enabled' : 'disabled';
|
||||
$themes[ $filter ][ $key ] = $themes['all'][ $key ];
|
||||
|
||||
if ( $current && isset( $current->response[ $key ] ) )
|
||||
$themes['upgrade'][ $key ] = $themes['all'][ $key ];
|
||||
}
|
||||
|
||||
if ( $s ) {
|
||||
$status = 'search';
|
||||
|
@ -110,19 +98,27 @@ class WP_MS_Themes_List_Table extends WP_List_Table {
|
|||
$status = 'all';
|
||||
|
||||
$this->items = $themes[ $status ];
|
||||
WP_Theme::sort_by_name( $this->items );
|
||||
|
||||
$this->has_items = ! empty( $themes['all'] );
|
||||
$total_this_page = $totals[ $status ];
|
||||
|
||||
if ( $orderby ) {
|
||||
$orderby = ucfirst( $orderby );
|
||||
$order = strtoupper( $order );
|
||||
|
||||
if ( $orderby == 'Name' ) {
|
||||
if ( 'ASC' == $order )
|
||||
$this->items = array_reverse( $this->items );
|
||||
} else {
|
||||
uasort( $this->items, array( &$this, '_order_callback' ) );
|
||||
}
|
||||
}
|
||||
|
||||
$start = ( $page - 1 ) * $themes_per_page;
|
||||
|
||||
if ( $total_this_page > $themes_per_page )
|
||||
$this->items = array_slice( $this->items, $start, $themes_per_page );
|
||||
$this->items = array_slice( $this->items, $start, $themes_per_page, true );
|
||||
|
||||
$this->set_pagination_args( array(
|
||||
'total_items' => $total_this_page,
|
||||
|
@ -135,19 +131,27 @@ class WP_MS_Themes_List_Table extends WP_List_Table {
|
|||
if ( is_null( $term ) )
|
||||
$term = stripslashes( $_REQUEST['s'] );
|
||||
|
||||
$search_fields = array( 'Name', 'Title', 'Description', 'Author', 'Author Name', 'Author URI', 'Template', 'Stylesheet' );
|
||||
foreach ( $search_fields as $field )
|
||||
if ( stripos( $theme[ $field ], $term ) !== false )
|
||||
foreach ( array( 'Name', 'Description', 'Author', 'Author', 'AuthorURI' ) as $field ) {
|
||||
// Don't mark up; Do translate.
|
||||
if ( false !== stripos( $theme->display( $field, false, true ), $term ) )
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( false !== stripos( $theme->get_stylesheet(), $term ) )
|
||||
return true;
|
||||
|
||||
if ( false !== stripos( $theme->get_template(), $term ) )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Not used by any core columns.
|
||||
function _order_callback( $theme_a, $theme_b ) {
|
||||
global $orderby, $order;
|
||||
|
||||
$a = $theme_a[$orderby];
|
||||
$b = $theme_b[$orderby];
|
||||
$a = $theme_a[ $orderby ];
|
||||
$b = $theme_b[ $orderby ];
|
||||
|
||||
if ( $a == $b )
|
||||
return 0;
|
||||
|
@ -159,9 +163,7 @@ class WP_MS_Themes_List_Table extends WP_List_Table {
|
|||
}
|
||||
|
||||
function no_items() {
|
||||
global $themes;
|
||||
|
||||
if ( !empty( $themes['all'] ) )
|
||||
if ( ! $$this->has_items )
|
||||
_e( 'No themes found.' );
|
||||
else
|
||||
_e( 'You do not appear to have any themes available at this time.' );
|
||||
|
@ -259,10 +261,13 @@ class WP_MS_Themes_List_Table extends WP_List_Table {
|
|||
|
||||
$context = $status;
|
||||
|
||||
if ( $this->is_site_themes )
|
||||
if ( $this->is_site_themes ) {
|
||||
$url = "site-themes.php?id={$this->site_id}&";
|
||||
else
|
||||
$allowed = $theme->is_allowed( 'site', $this->site_id );
|
||||
} else {
|
||||
$url = 'themes.php?';
|
||||
$allowed = $theme->is_allowed( 'network' );
|
||||
}
|
||||
|
||||
// preorder
|
||||
$actions = array(
|
||||
|
@ -272,30 +277,29 @@ class WP_MS_Themes_List_Table extends WP_List_Table {
|
|||
'delete' => ''
|
||||
);
|
||||
|
||||
$theme_key = $theme['Stylesheet'];
|
||||
$theme_key = $theme->get_stylesheet();
|
||||
|
||||
if ( empty( $theme['enabled'] ) )
|
||||
if ( ! $allowed )
|
||||
$actions['enable'] = '<a href="' . esc_url( wp_nonce_url($url . 'action=enable&theme=' . $theme_key . '&paged=' . $page . '&s=' . $s, 'enable-theme_' . $theme_key) ) . '" title="' . esc_attr__('Enable this theme') . '" class="edit">' . ( $this->is_site_themes ? __( 'Enable' ) : __( 'Network Enable' ) ) . '</a>';
|
||||
else
|
||||
$actions['disable'] = '<a href="' . esc_url( wp_nonce_url($url . 'action=disable&theme=' . $theme_key . '&paged=' . $page . '&s=' . $s, 'disable-theme_' . $theme_key) ) . '" title="' . esc_attr__('Disable this theme') . '">' . ( $this->is_site_themes ? __( 'Disable' ) : __( 'Network Disable' ) ) . '</a>';
|
||||
|
||||
if ( current_user_can('edit_themes') )
|
||||
$actions['edit'] = '<a href="' . esc_url('theme-editor.php?theme=' . urlencode( $theme['Name'] )) . '" title="' . esc_attr__('Open this theme in the Theme Editor') . '" class="edit">' . __('Edit') . '</a>';
|
||||
$actions['edit'] = '<a href="' . esc_url('theme-editor.php?theme=' . $theme_key ) . '" title="' . esc_attr__('Open this theme in the Theme Editor') . '" class="edit">' . __('Edit') . '</a>';
|
||||
|
||||
if ( empty( $theme['enabled'] ) && current_user_can( 'delete_themes' ) && ! $this->is_site_themes && $theme_key != get_option( 'stylesheet' ) && $theme_key != get_option( 'template' ) )
|
||||
if ( ! $allowed && current_user_can( 'delete_themes' ) && ! $this->is_site_themes && $theme_key != get_option( 'stylesheet' ) && $theme_key != get_option( 'template' ) )
|
||||
$actions['delete'] = '<a href="' . esc_url( wp_nonce_url( 'themes.php?action=delete-selected&checked[]=' . $theme_key . '&theme_status=' . $context . '&paged=' . $page . '&s=' . $s, 'bulk-themes' ) ) . '" title="' . esc_attr__( 'Delete this theme' ) . '" class="delete">' . __( 'Delete' ) . '</a>';
|
||||
|
||||
$actions = apply_filters( 'theme_action_links', array_filter( $actions ), $theme_key, $theme, $context );
|
||||
$actions = apply_filters( "theme_action_links_$theme_key", $actions, $theme_key, $theme, $context );
|
||||
|
||||
$class = empty( $theme['enabled'] ) ? 'inactive' : 'active';
|
||||
$checkbox_id = "checkbox_" . md5($theme['Name']);
|
||||
$checkbox = "<input type='checkbox' name='checked[]' value='" . esc_attr( $theme_key ) . "' id='" . $checkbox_id . "' /><label class='screen-reader-text' for='" . $checkbox_id . "' >" . __('Select') . " " . $theme['Name'] . "</label>";
|
||||
$class = ! $allowed ? 'inactive' : 'active';
|
||||
$checkbox_id = "checkbox_" . md5( $theme->get('Name') );
|
||||
$checkbox = "<input type='checkbox' name='checked[]' value='" . esc_attr( $theme_key ) . "' id='" . $checkbox_id . "' /><label class='screen-reader-text' for='" . $checkbox_id . "' >" . __('Select') . " " . $theme->display('Name') . "</label>";
|
||||
|
||||
$description = '<p>' . $theme['Description'] . '</p>';
|
||||
$theme_name = $theme['Name'];
|
||||
$description = '<p>' . $theme->display( 'Description' ) . '</p>';
|
||||
|
||||
$id = sanitize_title( $theme_name );
|
||||
$id = sanitize_html_class( $theme->get_stylesheet() );
|
||||
|
||||
echo "<tr id='$id' class='$class'>";
|
||||
|
||||
|
@ -311,25 +315,25 @@ class WP_MS_Themes_List_Table extends WP_List_Table {
|
|||
echo "<th scope='row' class='check-column'>$checkbox</th>";
|
||||
break;
|
||||
case 'name':
|
||||
echo "<td class='theme-title'$style><strong>$theme_name</strong>";
|
||||
echo "<td class='theme-title'$style><strong>" . $theme->display('Name') . "</strong>";
|
||||
echo $this->row_actions( $actions, true );
|
||||
echo "</td>";
|
||||
break;
|
||||
case 'description':
|
||||
echo "<td class='column-description desc'$style>
|
||||
<div class='theme-description'>$description</div>
|
||||
<div class='theme-description'>" . $theme->display( 'Description' ) . "</div>
|
||||
<div class='$class second theme-version-author-uri'>";
|
||||
|
||||
$theme_meta = array();
|
||||
|
||||
if ( !empty( $theme['Version'] ) )
|
||||
$theme_meta[] = sprintf( __( 'Version %s' ), $theme['Version'] );
|
||||
if ( $theme->get('Version') )
|
||||
$theme_meta[] = sprintf( __( 'Version %s' ), $theme->display('Version') );
|
||||
|
||||
if ( !empty( $theme['Author'] ) )
|
||||
$theme_meta[] = sprintf( __( 'By %s' ), $theme['Author'] );
|
||||
if ( $theme->get('Author') )
|
||||
$theme_meta[] = sprintf( __( 'By %s' ), $theme->display('Author') );
|
||||
|
||||
if ( !empty( $theme['Theme URI'] ) )
|
||||
$theme_meta[] = '<a href="' . $theme['Theme URI'] . '" title="' . esc_attr__( 'Visit theme homepage' ) . '">' . __( 'Visit Theme Site' ) . '</a>';
|
||||
if ( $theme->get('ThemeURI') )
|
||||
$theme_meta[] = '<a href="' . $theme->display('ThemeURI') . '" title="' . esc_attr__( 'Visit theme homepage' ) . '">' . __( 'Visit Theme Site' ) . '</a>';
|
||||
|
||||
$theme_meta = apply_filters( 'theme_row_meta', $theme_meta, $theme_key, $theme, $status );
|
||||
echo implode( ' | ', $theme_meta );
|
||||
|
|
|
@ -24,11 +24,7 @@ class WP_Themes_List_Table extends WP_List_Table {
|
|||
}
|
||||
|
||||
function prepare_items() {
|
||||
global $ct;
|
||||
|
||||
$ct = current_theme_info();
|
||||
|
||||
$themes = get_allowed_themes();
|
||||
$themes = wp_get_themes( array( 'allowed' => true ) );
|
||||
|
||||
if ( ! empty( $_REQUEST['s'] ) ) {
|
||||
$search = strtolower( stripslashes( $_REQUEST['s'] ) );
|
||||
|
@ -45,13 +41,13 @@ class WP_Themes_List_Table extends WP_List_Table {
|
|||
|
||||
if ( $this->search || $this->features ) {
|
||||
foreach ( $themes as $key => $theme ) {
|
||||
if ( !$this->search_theme( $theme ) )
|
||||
if ( ! $this->search_theme( $theme ) )
|
||||
unset( $themes[ $key ] );
|
||||
}
|
||||
}
|
||||
|
||||
unset( $themes[$ct->name] );
|
||||
uksort( $themes, "strnatcasecmp" );
|
||||
unset( $themes[ get_option( 'stylesheet' ) ] );
|
||||
WP_Theme::sort_by_name( $themes );
|
||||
|
||||
$per_page = 999;
|
||||
$page = $this->get_pagenum();
|
||||
|
@ -125,75 +121,74 @@ class WP_Themes_List_Table extends WP_List_Table {
|
|||
|
||||
function display_rows() {
|
||||
$themes = $this->items;
|
||||
$theme_names = array_keys( $themes );
|
||||
natcasesort( $theme_names );
|
||||
|
||||
foreach ( $theme_names as $theme_name ) {
|
||||
$class = array( 'available-theme' );
|
||||
?>
|
||||
<div class="<?php echo join( ' ', $class ); ?>">
|
||||
<?php if ( !empty( $theme_name ) ) :
|
||||
$template = $themes[$theme_name]['Template'];
|
||||
$stylesheet = $themes[$theme_name]['Stylesheet'];
|
||||
$title = $themes[$theme_name]['Title'];
|
||||
$version = $themes[$theme_name]['Version'];
|
||||
$description = $themes[$theme_name]['Description'];
|
||||
$author = $themes[$theme_name]['Author'];
|
||||
$screenshot = $themes[$theme_name]['Screenshot'];
|
||||
$stylesheet_dir = $themes[$theme_name]['Stylesheet Dir'];
|
||||
$template_dir = $themes[$theme_name]['Template Dir'];
|
||||
$parent_theme = $themes[$theme_name]['Parent Theme'];
|
||||
$theme_root = $themes[$theme_name]['Theme Root'];
|
||||
$theme_root_uri = $themes[$theme_name]['Theme Root URI'];
|
||||
$preview_link = esc_url( add_query_arg( array( 'preview' => 1, 'template' => $template, 'stylesheet' => $stylesheet, 'preview_iframe' => true, 'TB_iframe' => 'true' ), home_url( '/' ) ) );
|
||||
$preview_text = esc_attr( sprintf( __( 'Preview of “%s”' ), $title ) );
|
||||
$tags = $themes[$theme_name]['Tags'];
|
||||
$thickbox_class = 'thickbox thickbox-preview';
|
||||
foreach ( $themes as $theme ) {
|
||||
echo '<div class="available-theme">';
|
||||
|
||||
$template = $theme->get_template();
|
||||
$stylesheet = $theme->get_stylesheet();
|
||||
|
||||
$title = $theme->display('Name');
|
||||
$version = $theme->display('Version');
|
||||
$author = $theme->display('Author');
|
||||
|
||||
$activate_link = wp_nonce_url( "themes.php?action=activate&template=" . urlencode( $template ) . "&stylesheet=" . urlencode( $stylesheet ), 'switch-theme_' . $template );
|
||||
$activate_text = esc_attr( sprintf( __( 'Activate “%s”' ), $title ) );
|
||||
$preview_link = esc_url( add_query_arg(
|
||||
array( 'preview' => 1, 'template' => $template, 'stylesheet' => $stylesheet, 'preview_iframe' => true, 'TB_iframe' => 'true' ),
|
||||
home_url( '/' ) ) );
|
||||
|
||||
$actions = array();
|
||||
$actions[] = '<a href="' . $activate_link . '" class="activatelink" title="' . $activate_text . '">' . __( 'Activate' ) . '</a>';
|
||||
$actions[] = '<a href="' . $preview_link . '" class="thickbox thickbox-preview" title="' . esc_attr( sprintf( __( 'Preview “%s”' ), $theme_name ) ) . '">' . __( 'Preview' ) . '</a>';
|
||||
$actions[] = '<a href="' . $activate_link . '" class="activatelink" title="'
|
||||
. esc_attr( sprintf( __( 'Activate “%s”' ), $title ) ) . '">' . __( 'Activate' ) . '</a>';
|
||||
$actions[] = '<a href="' . $preview_link . '" class="thickbox thickbox-preview" title="'
|
||||
. esc_attr( sprintf( __( 'Preview “%s”' ), $title ) ) . '">' . __( 'Preview' ) . '</a>';
|
||||
if ( ! is_multisite() && current_user_can( 'delete_themes' ) )
|
||||
$actions[] = '<a class="submitdelete deletion" href="' . wp_nonce_url( "themes.php?action=delete&template=$stylesheet", 'delete-theme_' . $stylesheet ) . '" onclick="' . "return confirm( '" . esc_js( sprintf( __( "You are about to delete this theme '%s'\n 'Cancel' to stop, 'OK' to delete." ), $theme_name ) ) . "' );" . '">' . __( 'Delete' ) . '</a>';
|
||||
$actions = apply_filters( 'theme_action_links', $actions, $themes[$theme_name] );
|
||||
$actions[] = '<a class="submitdelete deletion" href="' . wp_nonce_url( "themes.php?action=delete&template=$stylesheet", 'delete-theme_' . $stylesheet )
|
||||
. '" onclick="' . "return confirm( '" . esc_js( sprintf( __( "You are about to delete this theme '%s'\n 'Cancel' to stop, 'OK' to delete." ), $title ) )
|
||||
. "' );" . '">' . __( 'Delete' ) . '</a>';
|
||||
|
||||
$actions = apply_filters( 'theme_action_links', $actions, $theme );
|
||||
|
||||
$actions = implode ( ' | ', $actions );
|
||||
?>
|
||||
<a href="<?php echo $preview_link; ?>" class="<?php echo $thickbox_class; ?> screenshot">
|
||||
<?php if ( $screenshot ) : ?>
|
||||
<img src="<?php echo $theme_root_uri . '/' . $stylesheet . '/' . $screenshot; ?>" alt="" />
|
||||
<?php endif; ?>
|
||||
?>
|
||||
<a href="<?php echo $preview_link; ?>" class="thickbox thickbox-preview screenshot">
|
||||
<?php if ( $theme->get_screenshot() ) : ?>
|
||||
<img src="<?php echo esc_url( $theme->get_screenshot( 'absolute' ) ); ?>" alt="" />
|
||||
<?php endif; ?>
|
||||
</a>
|
||||
<h3><?php
|
||||
<h3><?php
|
||||
/* translators: 1: theme title, 2: theme version, 3: theme author */
|
||||
printf( __( '%1$s %2$s by %3$s' ), $title, $version, $author ) ; ?></h3>
|
||||
|
||||
<span class='action-links'><?php echo $actions ?></span>
|
||||
<span class="separator hide-if-no-js">| </span><a href="#" class="theme-detail hide-if-no-js" tabindex='4'><?php _e('Details') ?></a>
|
||||
<div class="themedetaildiv hide-if-js">
|
||||
<p><?php echo $description; ?></p>
|
||||
<?php if ( current_user_can( 'edit_themes' ) && $parent_theme ) {
|
||||
<span class='action-links'><?php echo $actions ?></span>
|
||||
<span class="separator hide-if-no-js">| </span><a href="#" class="theme-detail hide-if-no-js" tabindex='4'><?php _e('Details') ?></a>
|
||||
<div class="themedetaildiv hide-if-js">
|
||||
<p><?php echo $theme->display('Description'); ?></p>
|
||||
<?php if ( current_user_can( 'edit_themes' ) && $theme->parent() ) :
|
||||
/* translators: 1: theme title, 2: template dir, 3: stylesheet_dir, 4: theme title, 5: parent_theme */ ?>
|
||||
<p><?php printf( __( 'The template files are located in <code>%2$s</code>. The stylesheet files are located in <code>%3$s</code>. <strong>%4$s</strong> uses templates from <strong>%5$s</strong>. Changes made to the templates will affect both themes.' ), $title, str_replace( WP_CONTENT_DIR, '', $template_dir ), str_replace( WP_CONTENT_DIR, '', $stylesheet_dir ), $title, $parent_theme ); ?></p>
|
||||
<?php } else { ?>
|
||||
<p><?php printf( __( 'All of this theme’s files are located in <code>%2$s</code>.' ), $title, str_replace( WP_CONTENT_DIR, '', $template_dir ), str_replace( WP_CONTENT_DIR, '', $stylesheet_dir ) ); ?></p>
|
||||
<?php } ?>
|
||||
<?php if ( $tags ) : ?>
|
||||
<p><?php _e( 'Tags:' ); ?> <?php echo join( ', ', $tags ); ?></p>
|
||||
<?php endif; ?>
|
||||
<?php endif; // end if not empty theme_name ?>
|
||||
</div>
|
||||
<?php theme_update_available( $themes[$theme_name] ); ?>
|
||||
<p><?php printf( __( 'The template files are located in <code>%2$s</code>. The stylesheet files are located in <code>%3$s</code>. <strong>%4$s</strong> uses templates from <strong>%5$s</strong>. Changes made to the templates will affect both themes.' ),
|
||||
$title, str_replace( WP_CONTENT_DIR, '', $theme->get_template_directory() ), str_replace( WP_CONTENT_DIR, '', $theme->get_stylesheet_directory() ), $title, $theme->parent()->display('Name') ); ?></p>
|
||||
<?php else :
|
||||
/* translators: 1: theme title, 2: template dir, 3: stylesheet_dir */ ?>
|
||||
<p><?php printf( __( 'All of this theme’s files are located in <code>%2$s</code>.' ),
|
||||
$title, str_replace( WP_CONTENT_DIR, '', $theme->get_template_directory() ), str_replace( WP_CONTENT_DIR, '', $theme->get_stylesheet_directory() ) ); ?></p>
|
||||
<?php endif; ?>
|
||||
<?php
|
||||
if ( $theme->get('Tags') )
|
||||
printf( '<p>' . __( 'Tags: %s.' ) . '</p>', $theme->display('Tags') );
|
||||
?>
|
||||
</div>
|
||||
<?php } // end foreach $theme_names
|
||||
<?php theme_update_available( $theme ); ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
||||
function search_theme( $theme ) {
|
||||
// Search the features
|
||||
if ( $this->features ) {
|
||||
foreach ( $this->features as $word ) {
|
||||
if ( ! in_array( $word, $theme['Tags'] ) )
|
||||
if ( ! in_array( $word, $theme->get('Tags') ) )
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -201,17 +196,24 @@ class WP_Themes_List_Table extends WP_List_Table {
|
|||
// Match all phrases
|
||||
if ( $this->search ) {
|
||||
foreach ( $this->search as $word ) {
|
||||
if ( in_array( $word, $theme['Tags'] ) )
|
||||
if ( in_array( $word, $theme->get('Tags') ) )
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ( array( 'Name', 'Title', 'Description', 'Author', 'Template', 'Stylesheet' ) as $header ) {
|
||||
if ( false !== stripos( $theme[ $header ], $word ) )
|
||||
foreach ( array( 'Name', 'Description', 'Author', 'AuthorURI' ) as $header ) {
|
||||
// Don't mark up; Do translate.
|
||||
if ( false !== stripos( $theme->display( $header, false, true ), $word ) )
|
||||
continue 2;
|
||||
}
|
||||
|
||||
if ( false !== stripos( $theme->get_stylesheet(), $word ) )
|
||||
continue;
|
||||
|
||||
if ( false !== stripos( $theme->get_template(), $word ) )
|
||||
continue;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -383,11 +383,11 @@ function wp_dashboard_right_now() {
|
|||
echo "\n\t</table>\n\t</div>";
|
||||
|
||||
echo "\n\t".'<div class="versions">';
|
||||
$ct = current_theme_info();
|
||||
$theme = wp_get_theme();
|
||||
|
||||
echo "\n\t<p>";
|
||||
|
||||
if ( empty( $ct->stylesheet_dir ) ) {
|
||||
if ( $theme->errors() ) {
|
||||
if ( ! is_multisite() || is_super_admin() )
|
||||
echo '<span class="error-message">' . __('ERROR: The themes directory is either empty or doesn’t exist. Please check your installation.') . '</span>';
|
||||
} elseif ( ! empty($wp_registered_sidebars) ) {
|
||||
|
@ -401,7 +401,7 @@ function wp_dashboard_right_now() {
|
|||
}
|
||||
$num = number_format_i18n( $num_widgets );
|
||||
|
||||
$switch_themes = $ct->title;
|
||||
$switch_themes = $theme->display('Name');
|
||||
if ( current_user_can( 'switch_themes') )
|
||||
$switch_themes = '<a href="themes.php">' . $switch_themes . '</a>';
|
||||
if ( current_user_can( 'edit_theme_options' ) ) {
|
||||
|
@ -411,9 +411,9 @@ function wp_dashboard_right_now() {
|
|||
}
|
||||
} else {
|
||||
if ( current_user_can( 'switch_themes' ) )
|
||||
printf( __('Theme <span class="b"><a href="themes.php">%1$s</a></span>'), $ct->title );
|
||||
printf( __('Theme <span class="b"><a href="themes.php">%1$s</a></span>'), $theme->display('Name') );
|
||||
else
|
||||
printf( __('Theme <span class="b">%1$s</span>'), $ct->title );
|
||||
printf( __('Theme <span class="b">%1$s</span>'), $theme->display('Name') );
|
||||
}
|
||||
echo '</p>';
|
||||
|
||||
|
@ -1313,14 +1313,14 @@ function wp_welcome_panel() {
|
|||
<div class="welcome-panel-column welcome-panel-last">
|
||||
<h4><span class="icon16 icon-appearance"></span> <?php _e( 'Customize Your Site' ); ?></h4>
|
||||
<?php
|
||||
$ct = current_theme_info();
|
||||
if ( empty ( $ct->stylesheet_dir ) ) :
|
||||
$theme = wp_get_theme();
|
||||
if ( $theme->errors() ) :
|
||||
echo '<p>';
|
||||
printf( __( '<a href="%s">Install a theme</a> to get started customizing your site.' ), esc_url( admin_url( 'themes.php' ) ) );
|
||||
echo '</p>';
|
||||
else:
|
||||
$customize_links = array();
|
||||
if ( 'twentyeleven' == $ct->stylesheet )
|
||||
if ( 'twentyeleven' == $theme->get_stylesheet() )
|
||||
$customize_links[] = sprintf( __( '<a href="%s">Choose light or dark</a>' ), esc_url( admin_url( 'themes.php?page=theme_options' ) ) );
|
||||
|
||||
if ( current_theme_supports( 'custom-background' ) )
|
||||
|
@ -1334,7 +1334,7 @@ function wp_welcome_panel() {
|
|||
|
||||
if ( ! empty( $customize_links ) ) {
|
||||
echo '<p>';
|
||||
printf( __( 'Use the current theme — %1$s — or <a href="%2$s">choose a new one</a>. If you stick with %3$s, here are a few ways to make your site look unique.' ), $ct->title, esc_url( admin_url( 'themes.php' ) ), $ct->title );
|
||||
printf( __( 'Use the current theme — %1$s — or <a href="%2$s">choose a new one</a>. If you stick with %1$s, here are a few ways to make your site look unique.' ), $theme->display('Name'), esc_url( admin_url( 'themes.php' ) ) );
|
||||
echo '</p>';
|
||||
?>
|
||||
<ul>
|
||||
|
@ -1345,7 +1345,7 @@ function wp_welcome_panel() {
|
|||
<?php
|
||||
} else {
|
||||
echo '<p>';
|
||||
printf( __( 'Use the current theme — %1$s — or <a href="%2$s">choose a new one</a>.' ), $ct->title, esc_url( admin_url( 'themes.php' ) ) );
|
||||
printf( __( 'Use the current theme — %1$s — or <a href="%2$s">choose a new one</a>.' ), $this->display('Name'), esc_url( admin_url( 'themes.php' ) ) );
|
||||
echo '</p>';
|
||||
}
|
||||
endif; ?>
|
||||
|
|
|
@ -880,3 +880,60 @@ function add_contextual_help( $screen, $help ) {
|
|||
|
||||
WP_Screen::add_old_compat_help( $screen, $help );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the allowed themes for the current blog.
|
||||
*
|
||||
* @since 3.0.0
|
||||
* @deprecated 3.4.0
|
||||
* @deprecated Use wp_get_themes()
|
||||
* @see wp_get_themes()
|
||||
*
|
||||
* @return array $themes Array of allowed themes.
|
||||
*/
|
||||
function get_allowed_themes() {
|
||||
_deprecated_function( __FUNCTION__, '3.4', "wp_get_themes( array( 'allowed' => true ) )" );
|
||||
|
||||
$themes = wp_get_themes( array( 'allowed' => true ) );
|
||||
|
||||
$wp_themes = array();
|
||||
foreach ( $themes as $theme ) {
|
||||
$wp_themes[ $theme->get('Name') ] = $theme;
|
||||
}
|
||||
|
||||
return $wp_themes;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@internal Missing Short Description}}
|
||||
*
|
||||
* @since 1.5.0
|
||||
*
|
||||
* @return unknown
|
||||
*/
|
||||
function get_broken_themes() {
|
||||
_deprecated_function( __FUNCTION__, '3.4', "wp_get_themes( array( 'errors' => true )" );
|
||||
|
||||
$themes = wp_get_themes( array( 'errors' => true ) );
|
||||
$broken = array();
|
||||
foreach ( $themes as $theme ) {
|
||||
$broken[ $theme->get('Name') ] = array(
|
||||
'Title' => $theme->get('Name'),
|
||||
'Description' => $theme->errors()->get_error_message(),
|
||||
);
|
||||
}
|
||||
return $broken;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@internal Missing Short Description}}
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @return unknown
|
||||
*/
|
||||
function current_theme_info() {
|
||||
_deprecated_function( __FUNCTION__, '3.4', 'wp_get_theme()' );
|
||||
|
||||
return wp_get_theme();
|
||||
}
|
|
@ -64,3 +64,13 @@ function is_wpmu_sitewide_plugin( $file ) {
|
|||
_deprecated_function(__FUNCTION__, '3.0', 'is_network_only_plugin()' );
|
||||
return is_network_only_plugin( $file );
|
||||
}
|
||||
|
||||
function get_site_allowed_themes() {
|
||||
_deprecated_function( __FUNCTION__, '3.4', 'WP_Theme::get_allowed_on_network()' );
|
||||
return array_map( 'intval', WP_Theme::get_allowed_on_network() );
|
||||
}
|
||||
|
||||
function wpmu_get_blog_allowedthemes( $blog_id = 0 ) {
|
||||
_deprecated_function( __FUNCTION__, '3.4', 'WP_Theme::get_allowed_on_site()' );
|
||||
return array_map( 'intval', WP_Theme::get_allowed_on_site( $blog_id ) );
|
||||
}
|
|
@ -169,35 +169,6 @@ function wpmu_delete_user( $id ) {
|
|||
return true;
|
||||
}
|
||||
|
||||
function wpmu_get_blog_allowedthemes( $blog_id = 0 ) {
|
||||
$themes = get_themes();
|
||||
|
||||
if ( $blog_id != 0 )
|
||||
switch_to_blog( $blog_id );
|
||||
|
||||
$blog_allowed_themes = get_option( 'allowedthemes' );
|
||||
if ( !is_array( $blog_allowed_themes ) || empty( $blog_allowed_themes ) ) { // convert old allowed_themes to new allowedthemes
|
||||
$blog_allowed_themes = get_option( 'allowed_themes' );
|
||||
|
||||
if ( is_array( $blog_allowed_themes ) ) {
|
||||
foreach( (array) $themes as $key => $theme ) {
|
||||
$theme_key = esc_html( $theme['Stylesheet'] );
|
||||
if ( isset( $blog_allowed_themes[$key] ) == true ) {
|
||||
$blog_allowedthemes[$theme_key] = 1;
|
||||
}
|
||||
}
|
||||
$blog_allowed_themes = $blog_allowedthemes;
|
||||
add_option( 'allowedthemes', $blog_allowed_themes );
|
||||
delete_option( 'allowed_themes' );
|
||||
}
|
||||
}
|
||||
|
||||
if ( $blog_id != 0 )
|
||||
restore_current_blog();
|
||||
|
||||
return $blog_allowed_themes;
|
||||
}
|
||||
|
||||
function update_option_new_admin_email( $old_value, $value ) {
|
||||
$email = get_option( 'admin_email' );
|
||||
if ( $value == get_option( 'admin_email' ) || !is_email( $value ) )
|
||||
|
@ -296,26 +267,6 @@ function new_user_email_admin_notice() {
|
|||
}
|
||||
add_action( 'admin_notices', 'new_user_email_admin_notice' );
|
||||
|
||||
function get_site_allowed_themes() {
|
||||
$themes = get_themes();
|
||||
$allowed_themes = get_site_option( 'allowedthemes' );
|
||||
if ( !is_array( $allowed_themes ) || empty( $allowed_themes ) ) {
|
||||
$allowed_themes = get_site_option( 'allowed_themes' ); // convert old allowed_themes format
|
||||
if ( !is_array( $allowed_themes ) ) {
|
||||
$allowed_themes = array();
|
||||
} else {
|
||||
foreach( (array) $themes as $key => $theme ) {
|
||||
$theme_key = esc_html( $theme['Stylesheet'] );
|
||||
if ( isset( $allowed_themes[ $key ] ) == true ) {
|
||||
$allowedthemes[ $theme_key ] = 1;
|
||||
}
|
||||
}
|
||||
$allowed_themes = $allowedthemes;
|
||||
}
|
||||
}
|
||||
return $allowed_themes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if there is any upload space left in the current blog's quota.
|
||||
*
|
||||
|
|
|
@ -343,12 +343,9 @@ function populate_options() {
|
|||
|
||||
$template = WP_DEFAULT_THEME;
|
||||
// If default theme is a child theme, we need to get its template
|
||||
foreach ( (array) get_themes() as $theme ) {
|
||||
if ( WP_DEFAULT_THEME == $theme['Stylesheet'] ) {
|
||||
$template = $theme['Template'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
$theme = wp_get_theme( $template );
|
||||
if ( ! $theme->errors() )
|
||||
$template = $theme->get_template();
|
||||
|
||||
$timezone_string = '';
|
||||
$gmt_offset = 0;
|
||||
|
|
|
@ -265,16 +265,14 @@ function install_theme_information() {
|
|||
}
|
||||
}
|
||||
|
||||
$themes = get_themes();
|
||||
foreach ( (array) $themes as $this_theme ) {
|
||||
if ( is_array($this_theme) && $this_theme['Stylesheet'] == $api->slug ) {
|
||||
if ( version_compare( $this_theme['Version'], $api->version, '=' ) ) {
|
||||
$theme = wp_get_theme( $api->slug );
|
||||
if ( is_a( $theme, 'WP_Theme' ) ) {
|
||||
switch ( version_compare( $theme->get('Version'), $api->version ) ) {
|
||||
case 0; // equal
|
||||
$type = 'latest_installed';
|
||||
} elseif ( version_compare( $this_theme['Version'], $api->version, '>' ) ) {
|
||||
case 1: // installed theme > api version
|
||||
$type = 'newer_installed';
|
||||
$newer_version = $this_theme['Version'];
|
||||
}
|
||||
break;
|
||||
$newer_version = $theme->get('Version');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -6,46 +6,6 @@
|
|||
* @subpackage Administration
|
||||
*/
|
||||
|
||||
/**
|
||||
* {@internal Missing Short Description}}
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @return unknown
|
||||
*/
|
||||
function current_theme_info() {
|
||||
$themes = get_themes();
|
||||
$current_theme = get_current_theme();
|
||||
|
||||
if ( ! $themes ) {
|
||||
$ct = new stdClass;
|
||||
$ct->name = $current_theme;
|
||||
return $ct;
|
||||
}
|
||||
|
||||
if ( ! isset( $themes[$current_theme] ) ) {
|
||||
delete_option( 'current_theme' );
|
||||
$current_theme = get_current_theme();
|
||||
}
|
||||
|
||||
$ct = new stdClass;
|
||||
$ct->name = $current_theme;
|
||||
$ct->title = $themes[$current_theme]['Title'];
|
||||
$ct->version = $themes[$current_theme]['Version'];
|
||||
$ct->parent_theme = $themes[$current_theme]['Parent Theme'];
|
||||
$ct->template_dir = $themes[$current_theme]['Template Dir'];
|
||||
$ct->stylesheet_dir = $themes[$current_theme]['Stylesheet Dir'];
|
||||
$ct->template = $themes[$current_theme]['Template'];
|
||||
$ct->stylesheet = $themes[$current_theme]['Stylesheet'];
|
||||
$ct->screenshot = $themes[$current_theme]['Screenshot'];
|
||||
$ct->description = $themes[$current_theme]['Description'];
|
||||
$ct->author = $themes[$current_theme]['Author'];
|
||||
$ct->tags = $themes[$current_theme]['Tags'];
|
||||
$ct->theme_root = $themes[$current_theme]['Theme Root'];
|
||||
$ct->theme_root_uri = $themes[$current_theme]['Theme Root URI'];
|
||||
return $ct;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a theme
|
||||
*
|
||||
|
@ -113,59 +73,6 @@ function delete_theme($template, $redirect = '') {
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@internal Missing Short Description}}
|
||||
*
|
||||
* @since 1.5.0
|
||||
*
|
||||
* @return unknown
|
||||
*/
|
||||
function get_broken_themes() {
|
||||
global $wp_broken_themes;
|
||||
|
||||
get_themes();
|
||||
return $wp_broken_themes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the allowed themes for the current blog.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @uses get_themes()
|
||||
* @uses current_theme_info()
|
||||
* @uses get_site_allowed_themes()
|
||||
* @uses wpmu_get_blog_allowedthemes
|
||||
*
|
||||
* @return array $themes Array of allowed themes.
|
||||
*/
|
||||
function get_allowed_themes() {
|
||||
if ( !is_multisite() )
|
||||
return get_themes();
|
||||
|
||||
$themes = get_themes();
|
||||
$ct = current_theme_info();
|
||||
$allowed_themes = apply_filters("allowed_themes", get_site_allowed_themes() );
|
||||
if ( $allowed_themes == false )
|
||||
$allowed_themes = array();
|
||||
|
||||
$blog_allowed_themes = wpmu_get_blog_allowedthemes();
|
||||
if ( is_array( $blog_allowed_themes ) )
|
||||
$allowed_themes = array_merge( $allowed_themes, $blog_allowed_themes );
|
||||
|
||||
if ( isset( $allowed_themes[ esc_html( $ct->stylesheet ) ] ) == false )
|
||||
$allowed_themes[ esc_html( $ct->stylesheet ) ] = true;
|
||||
|
||||
reset( $themes );
|
||||
foreach ( $themes as $key => $theme ) {
|
||||
if ( isset( $allowed_themes[ esc_html( $theme[ 'Stylesheet' ] ) ] ) == false )
|
||||
unset( $themes[ $key ] );
|
||||
}
|
||||
reset( $themes );
|
||||
|
||||
return $themes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Page Templates available in this theme
|
||||
*
|
||||
|
@ -174,37 +81,7 @@ function get_allowed_themes() {
|
|||
* @return array Key is the template name, value is the filename of the template
|
||||
*/
|
||||
function get_page_templates() {
|
||||
$themes = get_themes();
|
||||
$theme = get_current_theme();
|
||||
$templates = $themes[$theme]['Template Files'];
|
||||
$page_templates = array();
|
||||
|
||||
if ( is_array( $templates ) ) {
|
||||
$base = array( trailingslashit(get_template_directory()), trailingslashit(get_stylesheet_directory()) );
|
||||
|
||||
foreach ( $templates as $template ) {
|
||||
$basename = str_replace($base, '', $template);
|
||||
|
||||
// don't allow template files in subdirectories
|
||||
if ( false !== strpos($basename, '/') )
|
||||
continue;
|
||||
|
||||
if ( 'functions.php' == $basename )
|
||||
continue;
|
||||
|
||||
$template_data = implode( '', file( $template ));
|
||||
|
||||
$name = '';
|
||||
if ( preg_match( '|Template Name:(.*)$|mi', $template_data, $name ) )
|
||||
$name = _cleanup_header_comment($name[1]);
|
||||
|
||||
if ( !empty( $name ) ) {
|
||||
$page_templates[trim( $name )] = $basename;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $page_templates;
|
||||
return wp_get_theme()->get_page_templates();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -240,16 +117,14 @@ function theme_update_available( $theme ) {
|
|||
if ( !isset($themes_update) )
|
||||
$themes_update = get_site_transient('update_themes');
|
||||
|
||||
if ( is_object($theme) && isset($theme->stylesheet) )
|
||||
$stylesheet = $theme->stylesheet;
|
||||
elseif ( is_array($theme) && isset($theme['Stylesheet']) )
|
||||
$stylesheet = $theme['Stylesheet'];
|
||||
else
|
||||
return false; //No valid info passed.
|
||||
if ( ! is_a( $theme, 'WP_Theme' ) )
|
||||
return;
|
||||
|
||||
$stylesheet = $theme->get_stylesheet();
|
||||
|
||||
if ( isset($themes_update->response[ $stylesheet ]) ) {
|
||||
$update = $themes_update->response[ $stylesheet ];
|
||||
$theme_name = is_object($theme) ? $theme->name : (is_array($theme) ? $theme['Name'] : '');
|
||||
$theme_name = $theme->get('Name');
|
||||
$details_url = add_query_arg(array('TB_iframe' => 'true', 'width' => 1024, 'height' => 800), $update['url']); //Theme browser inside WP? replace this, Also, theme preview JS will override this on the available list.
|
||||
$update_url = wp_nonce_url('update.php?action=upgrade-theme&theme=' . urlencode($stylesheet), 'upgrade-theme_' . $stylesheet);
|
||||
$update_onclick = 'onclick="if ( confirm(\'' . esc_js( __("Updating this theme will lose any customizations you have made. 'Cancel' to stop, 'OK' to update.") ) . '\') ) {return true;}return false;"';
|
||||
|
|
|
@ -217,16 +217,13 @@ function wp_update_plugin($plugin, $feedback = '') {
|
|||
}
|
||||
|
||||
function get_theme_updates() {
|
||||
$themes = get_themes();
|
||||
$themes = wp_get_themes();
|
||||
$current = get_site_transient('update_themes');
|
||||
$update_themes = array();
|
||||
|
||||
foreach ( $themes as $theme ) {
|
||||
$theme = (object) $theme;
|
||||
if ( isset($current->response[ $theme->Stylesheet ]) ) {
|
||||
$update_themes[$theme->Stylesheet] = $theme;
|
||||
$update_themes[$theme->Stylesheet]->update = $current->response[ $theme->Stylesheet ];
|
||||
}
|
||||
foreach ( $current->response as $stylesheet => $data ) {
|
||||
$update_themes[ $stylesheet ] = wp_get_theme( $stylesheet );
|
||||
$update_themes[ $stylesheet ]->update = $data;
|
||||
}
|
||||
|
||||
return $update_themes;
|
||||
|
|
|
@ -96,16 +96,16 @@ if ( ! is_multisite() && current_user_can( 'install_themes' ) ) : ?>
|
|||
<h2><?php echo esc_html( $title ); ?>
|
||||
<?php endif; ?>
|
||||
</h2>
|
||||
|
||||
<h3><?php _e('Current Theme'); ?></h3>
|
||||
<?php $ct = wp_get_theme(); ?>
|
||||
<h3><?php _e( 'Current Theme' ); ?></h3>
|
||||
<div id="current-theme">
|
||||
<?php if ( $ct->screenshot ) : ?>
|
||||
<img src="<?php echo $ct->theme_root_uri . '/' . $ct->stylesheet . '/' . $ct->screenshot; ?>" alt="<?php esc_attr_e('Current theme preview'); ?>" />
|
||||
<?php if ( $ct->get_screenshot() ) : ?>
|
||||
<img src="<?php echo $ct->get_screenshot( 'absolute' ); ?>" alt="<?php esc_attr_e( 'Current theme preview'); ?>" />
|
||||
<?php endif; ?>
|
||||
<h4><?php
|
||||
/* translators: 1: theme title, 2: theme version, 3: theme author */
|
||||
printf(__('%1$s %2$s by %3$s'), $ct->title, $ct->version, $ct->author) ; ?></h4>
|
||||
<p class="theme-description"><?php echo $ct->description; ?></p>
|
||||
printf( __( '%1$s %2$s by %3$s' ), $ct->display('Name'), $ct->display('Version'), $ct->display('Author') ) ; ?></h4>
|
||||
<p class="theme-description"><?php echo $ct->display('Description'); ?></p>
|
||||
<div class="theme-options">
|
||||
<span><?php _e( 'Options:' )?></span>
|
||||
<?php
|
||||
|
@ -117,8 +117,8 @@ if ( ! is_multisite() && current_user_can( 'install_themes' ) ) : ?>
|
|||
if ( 'themes.php' == $item[2] || 'theme-editor.php' == $item[2] )
|
||||
continue;
|
||||
// 0 = name, 1 = capability, 2 = file
|
||||
if ( ( strcmp($self, $item[2]) == 0 && empty($parent_file)) || ($parent_file && ($item[2] == $parent_file)) ) $class = ' class="current"';
|
||||
|
||||
if ( ( strcmp($self, $item[2]) == 0 && empty($parent_file)) || ($parent_file && ($item[2] == $parent_file)) )
|
||||
$class = ' class="current"';
|
||||
if ( !empty($submenu[$item[2]]) ) {
|
||||
$submenu[$item[2]] = array_values($submenu[$item[2]]); // Re-index.
|
||||
$menu_hook = get_plugin_page_hook($submenu[$item[2]][0][2], $item[2]);
|
||||
|
@ -137,8 +137,8 @@ if ( ! is_multisite() && current_user_can( 'install_themes' ) ) : ?>
|
|||
}
|
||||
echo implode ( ' | ', $options );
|
||||
|
||||
if ( $ct->tags ) : ?>
|
||||
<p><?php _e('Tags:'); ?> <?php echo join(', ', $ct->tags); ?></p>
|
||||
if ( $ct->get('Tags') ) : ?>
|
||||
<p><?php _e('Tags:'); ?> <?php echo $ct->display('Tags'); ?></p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php theme_update_available($ct); ?>
|
||||
|
@ -218,8 +218,7 @@ if ( ! current_user_can( 'switch_themes' ) ) {
|
|||
|
||||
<?php
|
||||
// List broken themes, if any.
|
||||
$broken_themes = get_broken_themes();
|
||||
if ( current_user_can('edit_themes') && count( $broken_themes ) ) {
|
||||
if ( current_user_can('edit_themes') && $broken_themes = wp_get_themes( array( 'errors' => true ) ) ) {
|
||||
?>
|
||||
|
||||
<h3><?php _e('Broken Themes'); ?></h3>
|
||||
|
@ -231,20 +230,13 @@ if ( current_user_can('edit_themes') && count( $broken_themes ) ) {
|
|||
<th><?php _e('Description'); ?></th>
|
||||
</tr>
|
||||
<?php
|
||||
$theme = '';
|
||||
|
||||
$theme_names = array_keys($broken_themes);
|
||||
natcasesort($theme_names);
|
||||
|
||||
foreach ($theme_names as $theme_name) {
|
||||
$name = $broken_themes[$theme_name]['Title'];
|
||||
$description = $broken_themes[$theme_name]['Description'];
|
||||
|
||||
$theme = ('class="alternate"' == $theme) ? '' : 'class="alternate"';
|
||||
$alt = '';
|
||||
foreach ( $broken_themes as $broken_theme ) {
|
||||
$alt = ('class="alternate"' == $alt) ? '' : 'class="alternate"';
|
||||
echo "
|
||||
<tr $theme>
|
||||
<td>$name</td>
|
||||
<td>$description</td>
|
||||
<tr $alt>
|
||||
<td>" . $broken_theme->get('Name') ."</td>
|
||||
<td>" . $broken_theme->errors()->get_error_message() . "</td>
|
||||
</tr>";
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -242,17 +242,7 @@ final class WP_Customize {
|
|||
* @return string Theme name.
|
||||
*/
|
||||
public function current_theme( $current_theme ) {
|
||||
$themes = get_themes();
|
||||
|
||||
if ( ! $themes )
|
||||
return $current_theme;
|
||||
|
||||
foreach ( $themes as $theme ) {
|
||||
if ( $theme['Stylesheet'] == $this->stylesheet && $theme['Template'] == $this->template )
|
||||
return $theme['Name'];
|
||||
}
|
||||
|
||||
return $current_theme;
|
||||
return wp_get_theme( $this->stylesheet )->get('Name');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -2907,3 +2907,49 @@ function debug_fwrite( $fp, $string ) {
|
|||
function debug_fclose( $fp ) {
|
||||
_deprecated_function( __FUNCTION__, 'error_log()' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve list of themes with theme data in theme directory.
|
||||
*
|
||||
* The theme is broken, if it doesn't have a parent theme and is missing either
|
||||
* style.css and, or index.php. If the theme has a parent theme then it is
|
||||
* broken, if it is missing style.css; index.php is optional.
|
||||
*
|
||||
* @since 1.5.0
|
||||
* @global array $wp_themes Stores the working themes.
|
||||
*
|
||||
* @return array Theme list with theme data.
|
||||
*/
|
||||
function get_themes() {
|
||||
_deprecated_function( __FUNCTION__, '3.4', 'wp_get_themes()' );
|
||||
|
||||
global $wp_themes;
|
||||
if ( isset( $wp_themes ) )
|
||||
return $wp_themes;
|
||||
|
||||
$themes = wp_get_themes();
|
||||
$wp_themes = array();
|
||||
|
||||
foreach ( $themes as $theme ) {
|
||||
$wp_themes[ $theme->get('Name') ] = $theme;
|
||||
}
|
||||
|
||||
return $wp_themes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve theme data.
|
||||
*
|
||||
* @since 1.5.0
|
||||
*
|
||||
* @param string $theme Theme name.
|
||||
* @return array|null Null, if theme name does not exist. Theme data, if exists.
|
||||
*/
|
||||
function get_theme( $theme ) {
|
||||
_deprecated_function( __FUNCTION__, '3.4', 'wp_get_theme($stylesheet)' );
|
||||
|
||||
$themes = get_themes();
|
||||
if ( is_array( $themes ) && array_key_exists( $theme, $themes ) )
|
||||
return $themes[$theme];
|
||||
return null;
|
||||
}
|
|
@ -6,6 +6,95 @@
|
|||
* @subpackage Theme
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns an array of WP_Theme objects based on the arguments.
|
||||
*
|
||||
* Despite advances over get_themes(), this function is still quite expensive, and grows
|
||||
* linearly with additional themes. Stick to wp_get_theme() if possible.
|
||||
*
|
||||
* @since 3.4.0
|
||||
*
|
||||
* @param array $args Arguments. Currently 'errors' (defaults to false), 'allowed'
|
||||
* (true, false; null for either; defaults to null; only applies to multisite), and 'blog_id'
|
||||
* (defaults to current blog; used to find allowed themes; only applies to multisite).
|
||||
* @return Array of WP_Theme objects.
|
||||
*/
|
||||
function wp_get_themes( $args = array() ) {
|
||||
global $wp_theme_directories;
|
||||
|
||||
$defaults = array( 'errors' => false, 'allowed' => null, 'blog_id' => 0 );
|
||||
$args = wp_parse_args( $args, $defaults );
|
||||
|
||||
static $_themes;
|
||||
if ( ! isset( $_themes ) ) {
|
||||
$_themes = array();
|
||||
$theme_data = search_theme_directories();
|
||||
// Make sure the current theme wins out, in case search_theme_directories() picks the wrong
|
||||
// one in the case of a conflict. (Normally, last registered theme root wins.)
|
||||
$current_theme = get_stylesheet();
|
||||
$current_theme_root = get_raw_theme_root( $current_theme );
|
||||
if ( ! in_array( $current_theme_root, $wp_theme_directories ) )
|
||||
$current_theme_root = WP_CONTENT_DIR . $current_theme_root;
|
||||
foreach ( (array) $theme_data as $theme_slug => $data ) {
|
||||
if ( $current_theme == $theme_slug && $current_theme_root != $data['theme_root'] )
|
||||
$_themes[ $theme_slug ] = new WP_Theme( $theme_slug, $current_theme_root );
|
||||
else
|
||||
$_themes[ $theme_slug ] = new WP_Theme( $theme_slug, $data['theme_root'] );
|
||||
}
|
||||
}
|
||||
|
||||
$themes = $_themes;
|
||||
if ( empty( $themes ) )
|
||||
return $themes;
|
||||
|
||||
if ( null !== $args['errors'] ) {
|
||||
foreach ( $themes as $theme_slug => $theme ) {
|
||||
if ( $theme->errors() != $args['errors'] )
|
||||
unset( $themes[ $theme_slug ] );
|
||||
}
|
||||
}
|
||||
|
||||
if ( is_multisite() && null !== $args['allowed'] ) {
|
||||
if ( $allowed = $args['allowed'] ) {
|
||||
if ( 'network' == $allowed )
|
||||
$themes = array_intersect_key( $themes, WP_Theme::get_allowed_on_network( $args['blog_id'] ) );
|
||||
elseif ( 'site' == $allowed )
|
||||
$themes = array_intersect_key( $themes, WP_Theme::get_allowed_on_site( $args['blog_id'] ) );
|
||||
else
|
||||
$themes = array_intersect_key( $themes, WP_Theme::get_allowed( $args['blog_id'] ) );
|
||||
} else {
|
||||
$themes = array_diff_key( $themes, WP_Theme::get_allowed( $args['blog_id'] ) );
|
||||
}
|
||||
}
|
||||
|
||||
return $themes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a WP_Theme object for a theme.
|
||||
*
|
||||
* @since 3.4.0
|
||||
*
|
||||
* @param string $stylesheet Directory name for the theme. Optional. Defaults to current theme.
|
||||
* @param string $theme_root Absolute path of the theme root to look in. Optional. If not specified, get_raw_theme_root()
|
||||
* is used to calculate the theme root for the $stylesheet provided (or current theme).
|
||||
* @return WP_Theme
|
||||
*/
|
||||
function wp_get_theme( $stylesheet = null, $theme_root = null ) {
|
||||
global $wp_theme_directories;
|
||||
|
||||
if ( empty( $stylesheet ) )
|
||||
$stylesheet = get_stylesheet();
|
||||
|
||||
if ( empty( $theme_root ) ) {
|
||||
$theme_root = get_raw_theme_root( $stylesheet );
|
||||
if ( ! in_array( $theme_root, $wp_theme_directories ) )
|
||||
$theme_root = WP_CONTENT_DIR . $theme_root;
|
||||
}
|
||||
|
||||
return new WP_Theme( $stylesheet, $theme_root );
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether a child theme is in use.
|
||||
*
|
||||
|
@ -246,218 +335,6 @@ function get_theme_data( $theme_file ) {
|
|||
return $theme_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve list of themes with theme data in theme directory.
|
||||
*
|
||||
* The theme is broken, if it doesn't have a parent theme and is missing either
|
||||
* style.css and, or index.php. If the theme has a parent theme then it is
|
||||
* broken, if it is missing style.css; index.php is optional. The broken theme
|
||||
* list is saved in the {@link $wp_broken_themes} global, which is displayed on
|
||||
* the theme list in the administration panels.
|
||||
*
|
||||
* @since 1.5.0
|
||||
* @global array $wp_broken_themes Stores the broken themes.
|
||||
* @global array $wp_themes Stores the working themes.
|
||||
*
|
||||
* @return array Theme list with theme data.
|
||||
*/
|
||||
function get_themes() {
|
||||
global $wp_themes, $wp_broken_themes;
|
||||
|
||||
if ( isset($wp_themes) )
|
||||
return $wp_themes;
|
||||
|
||||
if ( !$theme_files = search_theme_directories() )
|
||||
return false;
|
||||
|
||||
asort( $theme_files );
|
||||
|
||||
$wp_themes = array();
|
||||
|
||||
foreach ( (array) $theme_files as $theme_file ) {
|
||||
$theme_root = $theme_file['theme_root'];
|
||||
$theme_file = $theme_file['theme_file'];
|
||||
|
||||
if ( !is_readable("$theme_root/$theme_file") ) {
|
||||
$wp_broken_themes[$theme_file] = array('Name' => $theme_file, 'Title' => $theme_file, 'Description' => __('File not readable.'));
|
||||
continue;
|
||||
}
|
||||
|
||||
$theme_data = get_theme_data("$theme_root/$theme_file");
|
||||
|
||||
$name = $theme_data['Name'];
|
||||
$title = $theme_data['Title'];
|
||||
$description = wptexturize($theme_data['Description']);
|
||||
$version = $theme_data['Version'];
|
||||
$author = $theme_data['Author'];
|
||||
$template = $theme_data['Template'];
|
||||
$stylesheet = dirname($theme_file);
|
||||
|
||||
$screenshot = false;
|
||||
foreach ( array('png', 'gif', 'jpg', 'jpeg') as $ext ) {
|
||||
if (file_exists("$theme_root/$stylesheet/screenshot.$ext")) {
|
||||
$screenshot = "screenshot.$ext";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( empty($name) ) {
|
||||
$name = dirname($theme_file);
|
||||
$title = $name;
|
||||
}
|
||||
|
||||
$parent_template = $template;
|
||||
|
||||
if ( empty($template) ) {
|
||||
if ( file_exists("$theme_root/$stylesheet/index.php") )
|
||||
$template = $stylesheet;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
|
||||
$template = trim( $template );
|
||||
|
||||
if ( !file_exists("$theme_root/$template/index.php") ) {
|
||||
$parent_dir = dirname(dirname($theme_file));
|
||||
if ( file_exists("$theme_root/$parent_dir/$template/index.php") ) {
|
||||
$template = "$parent_dir/$template";
|
||||
$template_directory = "$theme_root/$template";
|
||||
} else {
|
||||
/**
|
||||
* The parent theme doesn't exist in the current theme's folder or sub folder
|
||||
* so lets use the theme root for the parent template.
|
||||
*/
|
||||
if ( isset($theme_files[$template]) && file_exists( $theme_files[$template]['theme_root'] . "/$template/index.php" ) ) {
|
||||
$template_directory = $theme_files[$template]['theme_root'] . "/$template";
|
||||
} else {
|
||||
if ( empty( $parent_template) )
|
||||
$wp_broken_themes[$name] = array('Name' => $name, 'Title' => $title, 'Description' => __('Template is missing.'), 'error' => 'no_template');
|
||||
else
|
||||
$wp_broken_themes[$name] = array('Name' => $name, 'Title' => $title, 'Description' => sprintf( __('The parent theme is missing. Please install the "%s" parent theme.'), $parent_template ), 'error' => 'no_parent', 'parent' => $parent_template );
|
||||
continue;
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
$template_directory = trim( $theme_root . '/' . $template );
|
||||
}
|
||||
|
||||
$stylesheet_files = array();
|
||||
$template_files = array();
|
||||
|
||||
$stylesheet_dir = @ dir("$theme_root/$stylesheet");
|
||||
if ( $stylesheet_dir ) {
|
||||
while ( ($file = $stylesheet_dir->read()) !== false ) {
|
||||
if ( !preg_match('|^\.+$|', $file) ) {
|
||||
if ( preg_match('|\.css$|', $file) )
|
||||
$stylesheet_files[] = "$theme_root/$stylesheet/$file";
|
||||
elseif ( preg_match('|\.php$|', $file) )
|
||||
$template_files[] = "$theme_root/$stylesheet/$file";
|
||||
}
|
||||
}
|
||||
@ $stylesheet_dir->close();
|
||||
}
|
||||
|
||||
$template_dir = @ dir("$template_directory");
|
||||
if ( $template_dir ) {
|
||||
while ( ($file = $template_dir->read()) !== false ) {
|
||||
if ( preg_match('|^\.+$|', $file) )
|
||||
continue;
|
||||
if ( preg_match('|\.php$|', $file) ) {
|
||||
$template_files[] = "$template_directory/$file";
|
||||
} elseif ( is_dir("$template_directory/$file") ) {
|
||||
$template_subdir = @ dir("$template_directory/$file");
|
||||
if ( !$template_subdir )
|
||||
continue;
|
||||
while ( ($subfile = $template_subdir->read()) !== false ) {
|
||||
if ( preg_match('|^\.+$|', $subfile) )
|
||||
continue;
|
||||
if ( preg_match('|\.php$|', $subfile) )
|
||||
$template_files[] = "$template_directory/$file/$subfile";
|
||||
}
|
||||
@ $template_subdir->close();
|
||||
}
|
||||
}
|
||||
@ $template_dir->close();
|
||||
}
|
||||
|
||||
//Make unique and remove duplicates when stylesheet and template are the same i.e. most themes
|
||||
$template_files = array_unique($template_files);
|
||||
$stylesheet_files = array_unique($stylesheet_files);
|
||||
|
||||
$template_dir = $template_directory;
|
||||
$stylesheet_dir = $theme_root . '/' . $stylesheet;
|
||||
|
||||
if ( empty($template_dir) )
|
||||
$template_dir = '/';
|
||||
if ( empty($stylesheet_dir) )
|
||||
$stylesheet_dir = '/';
|
||||
|
||||
// Check for theme name collision. This occurs if a theme is copied to
|
||||
// a new theme directory and the theme header is not updated. Whichever
|
||||
// theme is first keeps the name. Subsequent themes get a suffix applied.
|
||||
// Default themes themes always trump their pretenders.
|
||||
if ( isset($wp_themes[$name]) ) {
|
||||
$trump_cards = array(
|
||||
'classic' => 'WordPress Classic',
|
||||
'default' => 'WordPress Default',
|
||||
'twentyten' => 'Twenty Ten',
|
||||
'twentyeleven' => 'Twenty Eleven',
|
||||
'twentytwelve' => 'Twenty Twelve',
|
||||
);
|
||||
if ( isset( $trump_cards[ $stylesheet ] ) && $name == $trump_cards[ $stylesheet ] ) {
|
||||
// If another theme has claimed to be one of our default themes, move
|
||||
// them aside.
|
||||
$suffix = $wp_themes[$name]['Stylesheet'];
|
||||
$new_name = "$name/$suffix";
|
||||
$wp_themes[$new_name] = $wp_themes[$name];
|
||||
$wp_themes[$new_name]['Name'] = $new_name;
|
||||
} else {
|
||||
$name = "$name/$stylesheet";
|
||||
}
|
||||
}
|
||||
|
||||
$wp_themes[$name] = array(
|
||||
'Name' => $name,
|
||||
'Title' => $title,
|
||||
'Description' => $description,
|
||||
'Author' => $author,
|
||||
'Author Name' => $theme_data['AuthorName'],
|
||||
'Author URI' => $theme_data['AuthorURI'],
|
||||
'Version' => $version,
|
||||
'Template' => $template,
|
||||
'Stylesheet' => $stylesheet,
|
||||
'Template Files' => $template_files,
|
||||
'Stylesheet Files' => $stylesheet_files,
|
||||
'Template Dir' => $template_dir,
|
||||
'Stylesheet Dir' => $stylesheet_dir,
|
||||
'Status' => $theme_data['Status'],
|
||||
'Screenshot' => $screenshot,
|
||||
'Tags' => $theme_data['Tags'],
|
||||
'Theme Root' => $theme_root,
|
||||
'Theme Root URI' => str_replace( WP_CONTENT_DIR, content_url(), $theme_root ),
|
||||
);
|
||||
}
|
||||
|
||||
unset($theme_files);
|
||||
|
||||
/* Resolve theme dependencies. */
|
||||
$theme_names = array_keys( $wp_themes );
|
||||
foreach ( (array) $theme_names as $theme_name ) {
|
||||
$wp_themes[$theme_name]['Parent Theme'] = '';
|
||||
if ( $wp_themes[$theme_name]['Stylesheet'] != $wp_themes[$theme_name]['Template'] ) {
|
||||
foreach ( (array) $theme_names as $parent_theme_name ) {
|
||||
if ( ($wp_themes[$parent_theme_name]['Stylesheet'] == $wp_themes[$parent_theme_name]['Template']) && ($wp_themes[$parent_theme_name]['Template'] == $wp_themes[$theme_name]['Template']) ) {
|
||||
$wp_themes[$theme_name]['Parent Theme'] = $wp_themes[$parent_theme_name]['Name'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $wp_themes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve theme roots.
|
||||
*
|
||||
|
@ -479,23 +356,6 @@ function get_theme_roots() {
|
|||
return $theme_roots;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve theme data.
|
||||
*
|
||||
* @since 1.5.0
|
||||
*
|
||||
* @param string $theme Theme name.
|
||||
* @return array|null Null, if theme name does not exist. Theme data, if exists.
|
||||
*/
|
||||
function get_theme($theme) {
|
||||
$themes = get_themes();
|
||||
|
||||
if ( is_array( $themes ) && array_key_exists( $theme, $themes ) )
|
||||
return $themes[$theme];
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve current theme display name.
|
||||
*
|
||||
|
@ -508,29 +368,10 @@ function get_theme($theme) {
|
|||
* @return string
|
||||
*/
|
||||
function get_current_theme() {
|
||||
if ( $theme = get_option('current_theme') )
|
||||
if ( $theme = get_option( 'current_theme' ) )
|
||||
return $theme;
|
||||
|
||||
$themes = get_themes();
|
||||
$current_theme = 'Twenty Eleven';
|
||||
|
||||
if ( $themes ) {
|
||||
$theme_names = array_keys( $themes );
|
||||
$current_template = get_option( 'template' );
|
||||
$current_stylesheet = get_option( 'stylesheet' );
|
||||
|
||||
foreach ( (array) $theme_names as $theme_name ) {
|
||||
if ( $themes[$theme_name]['Stylesheet'] == $current_stylesheet &&
|
||||
$themes[$theme_name]['Template'] == $current_template ) {
|
||||
$current_theme = $themes[$theme_name]['Name'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
update_option('current_theme', $current_theme);
|
||||
|
||||
return $current_theme;
|
||||
return wp_get_theme()->get('Name');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -235,32 +235,29 @@ function wp_update_themes() {
|
|||
if ( defined( 'WP_INSTALLING' ) )
|
||||
return false;
|
||||
|
||||
if ( !function_exists( 'get_themes' ) )
|
||||
require_once( ABSPATH . 'wp-includes/theme.php' );
|
||||
|
||||
$installed_themes = get_themes( );
|
||||
$installed_themes = wp_get_themes();
|
||||
$last_update = get_site_transient( 'update_themes' );
|
||||
if ( ! is_object($last_update) )
|
||||
$last_update = new stdClass;
|
||||
|
||||
$themes = array();
|
||||
$checked = array();
|
||||
$exclude_fields = array('Template Files', 'Stylesheet Files', 'Status', 'Theme Root', 'Theme Root URI', 'Template Dir', 'Stylesheet Dir', 'Description', 'Tags', 'Screenshot');
|
||||
|
||||
// Put slug of current theme into request.
|
||||
$themes['current_theme'] = get_option( 'stylesheet' );
|
||||
|
||||
foreach ( (array) $installed_themes as $theme_title => $theme ) {
|
||||
$themes[$theme['Stylesheet']] = array();
|
||||
$checked[$theme['Stylesheet']] = $theme['Version'];
|
||||
foreach ( $installed_themes as $theme ) {
|
||||
$checked[ $theme->get_stylesheet() ] = $theme->get('Version');
|
||||
|
||||
$themes[$theme['Stylesheet']]['Name'] = $theme['Name'];
|
||||
$themes[$theme['Stylesheet']]['Version'] = $theme['Version'];
|
||||
|
||||
foreach ( (array) $theme as $key => $value ) {
|
||||
if ( !in_array($key, $exclude_fields) )
|
||||
$themes[$theme['Stylesheet']][$key] = $value;
|
||||
}
|
||||
$themes[ $theme->get_stylesheet() ] = array(
|
||||
'Name' => $theme->get('Name'),
|
||||
'Title' => $theme->get('Name'),
|
||||
'Version' => $theme->get('Version'),
|
||||
'Author' => $theme->get('Author'),
|
||||
'Author URI' => $theme->get('AuthorURI'),
|
||||
'Template' => $theme->get_template(),
|
||||
'Stylesheet' => $theme->get_stylesheet(),
|
||||
);
|
||||
}
|
||||
|
||||
// Check for update on a different schedule, depending on the page.
|
||||
|
|
|
@ -112,6 +112,7 @@ require( ABSPATH . WPINC . '/formatting.php' );
|
|||
require( ABSPATH . WPINC . '/capabilities.php' );
|
||||
require( ABSPATH . WPINC . '/query.php' );
|
||||
require( ABSPATH . WPINC . '/theme.php' );
|
||||
require( ABSPATH . WPINC . '/class-wp-theme.php' );
|
||||
require( ABSPATH . WPINC . '/template.php' );
|
||||
require( ABSPATH . WPINC . '/user.php' );
|
||||
require( ABSPATH . WPINC . '/meta.php' );
|
||||
|
|
Loading…
Reference in New Issue