2012-02-25 05:12:43 +01:00
< ? php
/**
2014-03-04 21:20:28 +01:00
* Theme Customize Screen .
2012-02-25 05:12:43 +01:00
*
* @ package WordPress
* @ subpackage Customize
* @ since 3.4 . 0
*/
2012-06-26 20:48:18 +02:00
define ( 'IFRAME_REQUEST' , true );
2014-03-04 21:20:28 +01:00
/** Load WordPress Administration Bootstrap */
2013-09-25 02:17:40 +02:00
require_once ( dirname ( __FILE__ ) . '/admin.php' );
2014-03-04 21:20:28 +01:00
2014-07-14 21:00:24 +02:00
if ( ! current_user_can ( 'customize' ) ) {
2015-09-02 19:05:01 +02:00
wp_die (
'<h1>' . __ ( 'Cheatin’ uh?' ) . '</h1>' .
2016-06-29 17:15:40 +02:00
'<p>' . __ ( 'Sorry, you are not allowed to customize this site.' ) . '</p>' ,
2015-09-02 19:05:01 +02:00
403
);
2014-07-08 19:14:20 +02:00
}
2012-02-25 05:12:43 +01:00
Customize: Implement customized state persistence with changesets.
Includes infrastructure developed in the Customize Snapshots feature plugin.
See https://make.wordpress.org/core/2016/10/12/customize-changesets-technical-design-decisions/
Props westonruter, valendesigns, utkarshpatel, stubgo, lgedeon, ocean90, ryankienstra, mihai2u, dlh, aaroncampbell, jonathanbardo, jorbin.
See #28721.
See #31089.
Fixes #30937.
Fixes #31517.
Fixes #30028.
Fixes #23225.
Fixes #34142.
Fixes #36485.
git-svn-id: https://develop.svn.wordpress.org/trunk@38810 602fd350-edb4-49c9-b593-d223f7449a82
2016-10-18 22:04:36 +02:00
/**
* @ global WP_Scripts $wp_scripts
* @ global WP_Customize_Manager $wp_customize
*/
global $wp_scripts , $wp_customize ;
if ( $wp_customize -> changeset_post_id () ) {
if ( ! current_user_can ( get_post_type_object ( 'customize_changeset' ) -> cap -> edit_post , $wp_customize -> changeset_post_id () ) ) {
wp_die (
'<h1>' . __ ( 'Cheatin’ uh?' ) . '</h1>' .
'<p>' . __ ( 'Sorry, you are not allowed to edit this changeset.' ) . '</p>' ,
403
);
}
if ( in_array ( get_post_status ( $wp_customize -> changeset_post_id () ), array ( 'publish' , 'trash' ), true ) ) {
wp_die (
'<h1>' . __ ( 'Cheatin’ uh?' ) . '</h1>' .
'<p>' . __ ( 'This changeset has already been published and cannot be further modified.' ) . '</p>' .
'<p><a href="' . esc_url ( remove_query_arg ( 'changeset_uuid' ) ) . '">' . __ ( 'Customize New Changes' ) . '</a></p>' ,
403
);
}
}
2015-09-17 21:41:35 +02:00
wp_reset_vars ( array ( 'url' , 'return' , 'autofocus' ) );
if ( ! empty ( $url ) ) {
$wp_customize -> set_preview_url ( wp_unslash ( $url ) );
2014-07-08 19:14:20 +02:00
}
2015-09-17 21:41:35 +02:00
if ( ! empty ( $return ) ) {
$wp_customize -> set_return_url ( wp_unslash ( $return ) );
}
if ( ! empty ( $autofocus ) && is_array ( $autofocus ) ) {
$wp_customize -> set_autofocus ( wp_unslash ( $autofocus ) );
2014-07-08 19:14:20 +02:00
}
2012-06-08 20:45:12 +02:00
2012-02-25 05:12:43 +01:00
$registered = $wp_scripts -> registered ;
$wp_scripts = new WP_Scripts ;
$wp_scripts -> registered = $registered ;
add_action ( 'customize_controls_print_scripts' , 'print_head_scripts' , 20 );
add_action ( 'customize_controls_print_footer_scripts' , '_wp_footer_scripts' );
add_action ( 'customize_controls_print_styles' , 'print_admin_styles' , 20 );
2013-10-17 06:52:38 +02:00
/**
* Fires when Customizer controls are initialized , before scripts are enqueued .
*
* @ since 3.4 . 0
*/
2012-02-25 05:12:43 +01:00
do_action ( 'customize_controls_init' );
wp_enqueue_script ( 'customize-controls' );
wp_enqueue_style ( 'customize-controls' );
2013-10-17 06:52:38 +02:00
/**
2013-10-21 23:17:00 +02:00
* Enqueue Customizer control scripts .
2013-10-17 06:52:38 +02:00
*
* @ since 3.4 . 0
*/
2012-02-25 05:12:43 +01:00
do_action ( 'customize_controls_enqueue_scripts' );
// Let's roll.
@ header ( 'Content-Type: ' . get_option ( 'html_type' ) . '; charset=' . get_option ( 'blog_charset' ));
wp_user_settings ();
_wp_admin_html_begin ();
2013-11-11 18:38:49 +01:00
$body_class = 'wp-core-ui wp-customizer js' ;
2012-06-06 23:45:17 +02:00
if ( wp_is_mobile () ) :
$body_class .= ' mobile' ;
2015-03-29 14:22:33 +02:00
?> <meta name="viewport" id="viewport-meta" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=1.2" /><?php
2012-06-06 23:45:17 +02:00
endif ;
2015-09-17 21:41:35 +02:00
if ( $wp_customize -> is_ios () ) {
2012-06-06 23:45:17 +02:00
$body_class .= ' ios' ;
2014-11-11 23:28:38 +01:00
}
2012-06-06 23:45:17 +02:00
2014-11-11 23:28:38 +01:00
if ( is_rtl () ) {
$body_class .= ' rtl' ;
}
2012-11-08 23:01:06 +01:00
$body_class .= ' locale-' . sanitize_html_class ( strtolower ( str_replace ( '_' , '-' , get_locale () ) ) );
2015-09-17 21:41:35 +02:00
$admin_title = sprintf ( $wp_customize -> get_document_title_template (), __ ( 'Loading…' ) );
2014-11-11 23:28:38 +01:00
2013-11-11 16:46:36 +01:00
?> <title><?php echo $admin_title; ?></title>
2012-02-25 05:12:43 +01:00
2013-11-11 16:46:36 +01:00
< script type = " text/javascript " >
2016-11-04 16:53:01 +01:00
var ajaxurl = < ? php echo wp_json_encode ( admin_url ( 'admin-ajax.php' , 'relative' ) ); ?> ;
2013-11-11 16:46:36 +01:00
</ script >
< ? php
2013-10-17 06:52:38 +02:00
/**
2014-03-25 09:04:44 +01:00
* Fires when Customizer control styles are printed .
2013-10-17 06:52:38 +02:00
*
* @ since 3.4 . 0
*/
2012-02-25 05:12:43 +01:00
do_action ( 'customize_controls_print_styles' );
2013-10-17 06:52:38 +02:00
/**
2014-03-25 09:04:44 +01:00
* Fires when Customizer control scripts are printed .
2013-10-17 06:52:38 +02:00
*
* @ since 3.4 . 0
*/
2012-02-25 05:12:43 +01:00
do_action ( 'customize_controls_print_scripts' );
?>
</ head >
2012-06-06 23:45:17 +02:00
< body class = " <?php echo esc_attr( $body_class ); ?> " >
< div class = " wp-full-overlay expanded " >
2012-04-30 17:46:17 +02:00
< form id = " customize-controls " class = " wrap wp-full-overlay-sidebar " >
2012-05-15 03:03:31 +02:00
< div id = " customize-header-actions " class = " wp-full-overlay-header " >
2015-08-09 20:59:34 +02:00
< ? php
$save_text = $wp_customize -> is_theme_active () ? __ ( 'Save & Publish' ) : __ ( 'Save & Activate' );
Customize: Implement customized state persistence with changesets.
Includes infrastructure developed in the Customize Snapshots feature plugin.
See https://make.wordpress.org/core/2016/10/12/customize-changesets-technical-design-decisions/
Props westonruter, valendesigns, utkarshpatel, stubgo, lgedeon, ocean90, ryankienstra, mihai2u, dlh, aaroncampbell, jonathanbardo, jorbin.
See #28721.
See #31089.
Fixes #30937.
Fixes #31517.
Fixes #30028.
Fixes #23225.
Fixes #34142.
Fixes #36485.
git-svn-id: https://develop.svn.wordpress.org/trunk@38810 602fd350-edb4-49c9-b593-d223f7449a82
2016-10-18 22:04:36 +02:00
$save_attrs = array ();
if ( ! current_user_can ( get_post_type_object ( 'customize_changeset' ) -> cap -> publish_posts ) ) {
$save_attrs [ 'style' ] = 'display: none' ;
}
submit_button ( $save_text , 'primary save' , 'save' , false , $save_attrs );
2015-08-09 20:59:34 +02:00
?>
< span class = " spinner " ></ span >
2016-04-17 17:40:50 +02:00
< button type = " button " class = " customize-controls-preview-toggle " >
2015-08-09 20:59:34 +02:00
< span class = " controls " >< ? php _e ( 'Customize' ); ?> </span>
< span class = " preview " >< ? php _e ( 'Preview' ); ?> </span>
2016-04-17 17:40:50 +02:00
</ button >
2015-09-17 21:41:35 +02:00
< a class = " customize-controls-close " href = " <?php echo esc_url( $wp_customize->get_return_url () ); ?> " >
2016-04-17 17:40:50 +02:00
< span class = " screen-reader-text " >< ? php _e ( 'Close the Customizer and go back to the previous page' ); ?> </span>
2015-08-09 20:59:34 +02:00
</ a >
2012-04-16 16:02:28 +02:00
</ div >
2012-11-17 16:11:29 +01:00
2016-01-30 14:45:37 +01:00
< div id = " widgets-right " class = " wp-clearfix " ><!-- For Widget Customizer , many widgets try to look for instances under div #widgets-right, so we have to add that ID to a container div in the Customizer for compat -->
Improve/introduce Customizer JavaScript models for Controls, Sections, and Panels.
* Introduce models for panels and sections.
* Introduce API to expand and focus a control, section or panel.
* Allow deep-linking to panels, sections, and controls inside of the Customizer.
* Clean up `accordion.js`, removing all Customizer-specific logic.
* Add initial unit tests for `wp.customize.Class` in `customize-base.js`.
https://make.wordpress.org/core/2014/10/27/toward-a-complete-javascript-api-for-the-customizer/ provides an overview of how to use the JavaScript API.
props westonruter, celloexpressions, ryankienstra.
see #28032, #28579, #28580, #28650, #28709, #29758.
fixes #29529.
git-svn-id: https://develop.svn.wordpress.org/trunk@30102 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-29 23:50:21 +01:00
< div class = " wp-full-overlay-sidebar-content " tabindex = " -1 " >
2015-05-29 15:56:39 +02:00
< div id = " customize-info " class = " accordion-section customize-info " >
2015-09-13 08:15:42 +02:00
< div class = " accordion-section-title " >
2012-05-30 18:57:44 +02:00
< span class = " preview-notice " >< ? php
2016-02-21 07:14:59 +01:00
echo sprintf ( __ ( 'You are customizing %s' ), '<strong class="panel-title site-title">' . get_bloginfo ( 'name' ) . '</strong>' );
2012-05-30 18:57:44 +02:00
?> </span>
2016-04-17 17:40:50 +02:00
< button type = " button " class = " customize-help-toggle dashicons dashicons-editor-help " aria - expanded = " false " >< span class = " screen-reader-text " >< ? php _e ( 'Help' ); ?> </span></button>
2012-05-15 03:03:31 +02:00
</ div >
2015-05-29 15:56:39 +02:00
< div class = " customize-panel-description " >< ? php
2016-10-26 22:02:51 +02:00
_e ( 'The Customizer allows you to preview changes to your site before publishing them. You can navigate to different pages on your site within the preview. Edit shortcuts are shown for some editable elements; click anywhere in the preview to toggle them off and on.' );
2015-02-24 21:30:22 +01:00
?> </div>
2012-03-04 03:06:11 +01:00
</ div >
2012-02-25 05:12:43 +01:00
Improve/introduce Customizer JavaScript models for Controls, Sections, and Panels.
* Introduce models for panels and sections.
* Introduce API to expand and focus a control, section or panel.
* Allow deep-linking to panels, sections, and controls inside of the Customizer.
* Clean up `accordion.js`, removing all Customizer-specific logic.
* Add initial unit tests for `wp.customize.Class` in `customize-base.js`.
https://make.wordpress.org/core/2014/10/27/toward-a-complete-javascript-api-for-the-customizer/ provides an overview of how to use the JavaScript API.
props westonruter, celloexpressions, ryankienstra.
see #28032, #28579, #28580, #28650, #28709, #29758.
fixes #29529.
git-svn-id: https://develop.svn.wordpress.org/trunk@30102 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-29 23:50:21 +01:00
< div id = " customize-theme-controls " >
2016-09-24 00:22:09 +02:00
< ul class = " customize-pane-parent " >< ? php // Panels and sections are managed here via JavaScript ?></ul>
Improve/introduce Customizer JavaScript models for Controls, Sections, and Panels.
* Introduce models for panels and sections.
* Introduce API to expand and focus a control, section or panel.
* Allow deep-linking to panels, sections, and controls inside of the Customizer.
* Clean up `accordion.js`, removing all Customizer-specific logic.
* Add initial unit tests for `wp.customize.Class` in `customize-base.js`.
https://make.wordpress.org/core/2014/10/27/toward-a-complete-javascript-api-for-the-customizer/ provides an overview of how to use the JavaScript API.
props westonruter, celloexpressions, ryankienstra.
see #28032, #28579, #28580, #28650, #28709, #29758.
fixes #29529.
git-svn-id: https://develop.svn.wordpress.org/trunk@30102 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-29 23:50:21 +01:00
</ div >
2012-05-15 03:03:31 +02:00
</ div >
2014-04-02 19:03:14 +02:00
</ div >
2012-02-25 05:12:43 +01:00
2012-05-15 03:03:31 +02:00
< div id = " customize-footer-actions " class = " wp-full-overlay-footer " >
2016-02-16 02:56:13 +01:00
< ? php $previewable_devices = $wp_customize -> get_previewable_devices (); ?>
< ? php if ( ! empty ( $previewable_devices ) ) : ?>
< div class = " devices " >
< ? php foreach ( ( array ) $previewable_devices as $device => $settings ) : ?>
< ? php
if ( empty ( $settings [ 'label' ] ) ) {
continue ;
}
$active = ! empty ( $settings [ 'default' ] );
$class = 'preview-' . $device ;
if ( $active ) {
$class .= ' active' ;
}
?>
< button type = " button " class = " <?php echo esc_attr( $class ); ?> " aria - pressed = " <?php echo esc_attr( $active ) ?> " data - device = " <?php echo esc_attr( $device ); ?> " >
< span class = " screen-reader-text " >< ? php echo esc_html ( $settings [ 'label' ] ); ?> </span>
</ button >
< ? php endforeach ; ?>
</ div >
< ? php endif ; ?>
2016-11-03 23:34:05 +01:00
< button type = " button " class = " collapse-sidebar button " aria - expanded = " true " aria - label = " <?php esc_attr_e( 'Hide Controls' ); ?> " >
2012-04-16 16:02:28 +02:00
< span class = " collapse-sidebar-arrow " ></ span >
2016-11-03 23:34:05 +01:00
< span class = " collapse-sidebar-label " >< ? php _e ( 'Hide Controls' ); ?> </span>
2015-07-10 23:21:07 +02:00
</ button >
2012-02-25 05:12:43 +01:00
</ div >
</ form >
2012-04-30 17:46:17 +02:00
< div id = " customize-preview " class = " wp-full-overlay-main " ></ div >
2012-02-25 05:12:43 +01:00
< ? php
2013-10-17 06:52:38 +02:00
/**
2016-05-25 18:04:37 +02:00
* Prints templates , control scripts , and settings in the footer .
2013-10-17 06:52:38 +02:00
*
* @ since 3.4 . 0
*/
2012-02-25 05:12:43 +01:00
do_action ( 'customize_controls_print_footer_scripts' );
?>
2012-06-06 23:45:17 +02:00
</ div >
2012-02-25 05:12:43 +01:00
</ body >
</ html >