2007-05-25 03:16:21 -04:00
< ? php
2008-10-01 21:03:26 -04:00
/**
* WordPress Theme Administration API
*
* @ package WordPress
* @ subpackage Administration
*/
2007-05-25 03:16:21 -04:00
2008-10-01 21:03:26 -04:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ return unknown
*/
2007-05-25 03:16:21 -04:00
function current_theme_info () {
$themes = get_themes ();
$current_theme = get_current_theme ();
2010-03-18 23:09:02 -04:00
if ( ! isset ( $themes [ $current_theme ] ) ) {
delete_option ( 'current_theme' );
$current_theme = get_current_theme ();
}
2007-05-25 03:16:21 -04:00
$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' ];
2007-12-31 13:39:43 -05:00
$ct -> tags = $themes [ $current_theme ][ 'Tags' ];
2009-10-13 15:06:35 -04:00
$ct -> theme_root = $themes [ $current_theme ][ 'Theme Root' ];
$ct -> theme_root_uri = $themes [ $current_theme ][ 'Theme Root URI' ];
2007-05-25 03:16:21 -04:00
return $ct ;
}
2009-03-05 14:15:56 -05:00
/**
* Remove a theme
*
* @ since 2.8 . 0
*
* @ param string $template Template directory of the theme to delete
* @ return mixed
*/
function delete_theme ( $template ) {
global $wp_filesystem ;
if ( empty ( $template ) )
return false ;
ob_start ();
$url = wp_nonce_url ( 'themes.php?action=delete&template=' . $template , 'delete-theme_' . $template );
if ( false === ( $credentials = request_filesystem_credentials ( $url )) ) {
$data = ob_get_contents ();
ob_end_clean ();
if ( ! empty ( $data ) ){
include_once ( ABSPATH . 'wp-admin/admin-header.php' );
echo $data ;
include ( ABSPATH . 'wp-admin/admin-footer.php' );
exit ;
}
return ;
}
if ( ! WP_Filesystem ( $credentials ) ) {
request_filesystem_credentials ( $url , '' , true ); // Failed to connect, Error and request again
$data = ob_get_contents ();
ob_end_clean ();
2010-01-18 15:34:48 -05:00
if ( ! empty ( $data ) ) {
2009-03-05 14:15:56 -05:00
include_once ( ABSPATH . 'wp-admin/admin-header.php' );
echo $data ;
include ( ABSPATH . 'wp-admin/admin-footer.php' );
exit ;
}
return ;
}
if ( ! is_object ( $wp_filesystem ) )
return new WP_Error ( 'fs_unavailable' , __ ( 'Could not access filesystem.' ));
2009-04-19 15:36:28 -04:00
if ( is_wp_error ( $wp_filesystem -> errors ) && $wp_filesystem -> errors -> get_error_code () )
2010-01-21 16:37:43 -05:00
return new WP_Error ( 'fs_error' , __ ( 'Filesystem error.' ), $wp_filesystem -> errors );
2009-03-05 14:15:56 -05:00
//Get the base plugin folder
$themes_dir = $wp_filesystem -> wp_themes_dir ();
if ( empty ( $themes_dir ) )
return new WP_Error ( 'fs_no_themes_dir' , __ ( 'Unable to locate WordPress theme directory.' ));
$themes_dir = trailingslashit ( $themes_dir );
$theme_dir = trailingslashit ( $themes_dir . $template );
$deleted = $wp_filesystem -> delete ( $theme_dir , true );
if ( ! $deleted )
2010-01-21 16:37:43 -05:00
return new WP_Error ( 'could_not_remove_theme' , sprintf ( __ ( 'Could not fully remove the theme %s.' ), $template ) );
2009-03-05 14:15:56 -05:00
// Force refresh of theme update information
2010-01-08 15:49:55 -05:00
delete_site_transient ( 'update_themes' );
2009-03-05 14:15:56 -05:00
return true ;
}
2008-10-01 21:03:26 -04:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ return unknown
*/
2007-05-25 03:16:21 -04:00
function get_broken_themes () {
global $wp_broken_themes ;
get_themes ();
return $wp_broken_themes ;
}
2010-01-18 18:34:36 -05:00
/**
* Get the allowed themes for the current blog .
*
2010-03-26 15:13:36 -04:00
* @ since 3.0 . 0
2010-01-18 18:34:36 -05:00
*
* @ 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 );
2010-02-13 05:35:10 -05:00
if ( isset ( $allowed_themes [ esc_html ( $ct -> stylesheet ) ] ) == false )
$allowed_themes [ esc_html ( $ct -> stylesheet ) ] = true ;
2010-01-18 18:34:36 -05:00
reset ( $themes );
foreach ( $themes as $key => $theme ) {
2010-02-13 05:35:10 -05:00
if ( isset ( $allowed_themes [ esc_html ( $theme [ 'Stylesheet' ] ) ] ) == false )
2010-01-18 18:34:36 -05:00
unset ( $themes [ $key ] );
}
reset ( $themes );
2010-01-26 17:49:05 -05:00
2010-01-18 18:34:36 -05:00
return $themes ;
}
2008-10-01 21:03:26 -04:00
/**
2009-11-13 17:40:40 -05:00
* Get the Page Templates available in this theme
2008-10-01 21:03:26 -04:00
*
* @ since unknown
*
2009-11-19 14:53:27 -05:00
* @ return array Key is template name , Value is template name
2008-10-01 21:03:26 -04:00
*/
2007-05-25 03:16:21 -04:00
function get_page_templates () {
$themes = get_themes ();
$theme = get_current_theme ();
$templates = $themes [ $theme ][ 'Template Files' ];
2009-11-21 05:05:19 -05:00
$page_templates = array ();
2007-05-25 03:16:21 -04:00
if ( is_array ( $templates ) ) {
2009-11-21 05:05:19 -05:00
$base = array ( trailingslashit ( get_template_directory ()), trailingslashit ( get_stylesheet_directory ()) );
2007-05-25 03:16:21 -04:00
foreach ( $templates as $template ) {
2009-11-21 05:05:19 -05:00
$basename = str_replace ( $base , '' , $template );
// don't allow template files in subdirectories
if ( false !== strpos ( $basename , '/' ) )
continue ;
2009-10-14 16:46:09 -04:00
$template_data = implode ( '' , file ( $template ));
2007-06-13 22:25:30 -04:00
2008-08-08 13:05:10 -04:00
$name = '' ;
if ( preg_match ( '|Template Name:(.*)$|mi' , $template_data , $name ) )
2009-05-04 05:12:12 -04:00
$name = _cleanup_header_comment ( $name [ 1 ]);
2007-05-25 03:16:21 -04:00
2007-06-01 20:02:06 -04:00
if ( ! empty ( $name ) ) {
2009-11-21 05:05:19 -05:00
$page_templates [ trim ( $name )] = $basename ;
2007-05-25 03:16:21 -04:00
}
}
}
return $page_templates ;
}
2009-10-19 17:39:04 -04:00
/**
* Tidies a filename for url display by the theme editor .
2010-01-15 17:11:12 -05:00
*
2009-10-19 17:39:04 -04:00
* @ since 2.9 . 0
* @ private
2010-01-15 17:11:12 -05:00
*
2009-10-19 17:39:04 -04:00
* @ param string $fullpath Full path to the theme file
* @ param string $containingfolder Path of the theme parent folder
* @ return string
*/
function _get_template_edit_filename ( $fullpath , $containingfolder ) {
return str_replace ( dirname ( dirname ( $containingfolder )) , '' , $fullpath );
}
2010-05-03 09:23:34 -04:00
/**
* Check the current theme for reliance on deprecated theme compatibility
*
* Check to see if the current theme has all the required templates available
* from itself or its parent
*
* @ return nothing
*/
function _check_theme_deprecated_files () {
$files = array ( );
if ( ! locate_template ( array ( 'header.php' ) ) )
$files [] = 'header.php' ;
if ( ! locate_template ( array ( 'footer.php' ) ) )
$files [] = 'footer.php' ;
if ( ! locate_template ( array ( 'sidebar.php' ) ) )
$files [] = 'sidebar.php' ;
// Only notify if both are missing as you can use one or the other
if ( ! ( $comment = locate_template ( array ( 'comments.php' ) ) ) && ! ( $comment_popup = locate_template ( array ( 'comments-popup.php' ) ) ) ) {
$files [] = 'comments.php' ;
$files [] = 'comments-popup.php' ;
}
if ( ! empty ( $files ) ) : ?>
< div id = " deprecated-files-message " class = " error " >< p >
< ? php echo sprintf ( __ ( 'The current theme is incomplete as it is missing %1$s. Please update your theme to include these files as you are currently relying on deprecated behaviour.' ), implode ( $files , ', ' ) ); ?>
</ p ></ div >
< ? php endif ;
}
2007-05-25 03:16:21 -04:00
?>