From 5bf66662a9bdd62c5bccab15e607cd95cfb8fcab Mon Sep 17 00:00:00 2001
From: Charles Cabergs
' . __( 'You can use the theme editor to edit the individual CSS and PHP files which make up your theme.' ) . '
' . - '' . __( 'Begin by choosing a theme to edit from the dropdown menu and clicking the Select button. A list then appears of the theme’s template files. Clicking once on any file name causes the file to appear in the large Editor box.' ) . '
' . - '' . __( 'For PHP files, you can use the Documentation dropdown to select from functions recognized in that file. Look Up takes you to a web page with reference material about that particular function.' ) . '
' . - '' . __( 'When using a keyboard to navigate:' ) . '
' . - '' . __( 'After typing in your edits, click Update File.' ) . '
' . - '' . __( 'Advice: Think very carefully about your site crashing if you are live-editing the theme currently in use.' ) . '
' . - '' . sprintf( - /* translators: %s: Link to documentation on child themes. */ - __( 'Upgrading to a newer version of the same theme will override changes made here. To avoid this, consider creating a child theme instead.' ), - __( 'https://developer.wordpress.org/themes/advanced-topics/child-themes/' ) - ) . '
' . - ( is_network_admin() ? '' . __( 'Any edits to files from this screen will be reflected on all sites in the network.' ) . '
' : '' ), - ) -); - -get_current_screen()->set_help_sidebar( - '' . __( 'For more information:' ) . '
' . - '' . __( 'Documentation on Theme Development' ) . '
' . - '' . __( 'Documentation on Using Themes' ) . '
' . - '' . __( 'Documentation on Editing Files' ) . '
' . - '' . __( 'Documentation on Template Tags' ) . '
' . - '' . __( 'Support' ) . '
' -); - -wp_reset_vars( array( 'action', 'error', 'file', 'theme' ) ); - -if ( $theme ) { - $stylesheet = $theme; -} else { - $stylesheet = get_stylesheet(); -} - -$theme = wp_get_theme( $stylesheet ); - -if ( ! $theme->exists() ) { - wp_die( __( 'The requested theme does not exist.' ) ); -} - -if ( $theme->errors() && 'theme_no_stylesheet' == $theme->errors()->get_error_code() ) { - wp_die( __( 'The requested theme does not exist.' ) . ' ' . $theme->errors()->get_error_message() ); -} - -$allowed_files = array(); -$style_files = array(); -$has_templates = false; - -$file_types = wp_get_theme_file_editable_extensions( $theme ); - -foreach ( $file_types as $type ) { - switch ( $type ) { - case 'php': - $allowed_files += $theme->get_files( 'php', -1 ); - $has_templates = ! empty( $allowed_files ); - break; - case 'css': - $style_files = $theme->get_files( 'css', -1 ); - $allowed_files['style.css'] = $style_files['style.css']; - $allowed_files += $style_files; - break; - default: - $allowed_files += $theme->get_files( $type, -1 ); - break; - } -} - -// Move functions.php and style.css to the top. -if ( isset( $allowed_files['functions.php'] ) ) { - $allowed_files = array( 'functions.php' => $allowed_files['functions.php'] ) + $allowed_files; -} -if ( isset( $allowed_files['style.css'] ) ) { - $allowed_files = array( 'style.css' => $allowed_files['style.css'] ) + $allowed_files; -} - -if ( empty( $file ) ) { - $relative_file = 'style.css'; - $file = $allowed_files['style.css']; -} else { - $relative_file = wp_unslash( $file ); - $file = $theme->get_stylesheet_directory() . '/' . $relative_file; -} - -validate_file_to_edit( $file, $allowed_files ); - -// Handle fallback editing of file when JavaScript is not available. -$edit_error = null; -$posted_content = null; -if ( 'POST' === $_SERVER['REQUEST_METHOD'] ) { - $r = wp_edit_theme_plugin_file( wp_unslash( $_POST ) ); - if ( is_wp_error( $r ) ) { - $edit_error = $r; - if ( check_ajax_referer( 'edit-theme_' . $stylesheet . '_' . $relative_file, 'nonce', false ) && isset( $_POST['newcontent'] ) ) { - $posted_content = wp_unslash( $_POST['newcontent'] ); - } - } else { - wp_redirect( - add_query_arg( - array( - 'a' => 1, // This means "success" for some reason. - 'theme' => $stylesheet, - 'file' => $relative_file, - ), - admin_url( 'theme-editor.php' ) - ) - ); - exit; - } -} - - $settings = array( - 'codeEditor' => wp_enqueue_code_editor( compact( 'file' ) ), - ); - wp_enqueue_script( 'wp-theme-plugin-editor' ); - wp_add_inline_script( 'wp-theme-plugin-editor', sprintf( 'jQuery( function( $ ) { wp.themePluginEditor.init( $( "#template" ), %s ); } )', wp_json_encode( $settings ) ) ); - wp_add_inline_script( 'wp-theme-plugin-editor', 'wp.themePluginEditor.themeOrPlugin = "theme";' ); - - require_once( ABSPATH . 'wp-admin/admin-header.php' ); - - update_recently_edited( $file ); - - if ( ! is_file( $file ) ) { - $error = true; - } - - $content = ''; - if ( ! empty( $posted_content ) ) { - $content = $posted_content; - } elseif ( ! $error && filesize( $file ) > 0 ) { - $f = fopen( $file, 'r' ); - $content = fread( $f, filesize( $file ) ); - - if ( '.php' == substr( $file, strrpos( $file, '.' ) ) ) { - $functions = wp_doc_link_parse( $content ); - - $docs_select = ''; - } - - $content = esc_textarea( $content ); - } - - $file_description = get_file_description( $relative_file ); - $file_show = array_search( $file, array_filter( $allowed_files ) ); - $description = esc_html( $file_description ); - if ( $file_description != $file_show ) { - $description .= ' (' . esc_html( $file_show ) . ')'; - } - ?> -get_error_message() ? $edit_error->get_error_message() : $edit_error->get_error_code() ); ?>-
-
- built-in CSS editor.' ), - esc_url( add_query_arg( 'autofocus[section]', 'custom_css', admin_url( 'customize.php' ) ) ) - ); - ?> -
-' . __( 'This theme is broken.' ) . ' ' . $theme->errors()->get_error_message() . '
' . __( 'File does not exist! Please double check the name and try again.' ) . '