*
* @since 1.5.0
*
- * @param string $stylesheet_dir Absolute path to the current them.
+ * @param string $stylesheet_dir Absolute path to the current theme.
* @param string $stylesheet Directory name of the current theme.
* @param string $theme_root Absolute path to themes directory.
*/
} else {
/*
* Since retrieve_widgets() is called when initializing a theme in the Customizer,
- * we need to to remove the theme mods to avoid overwriting changes made via
+ * we need to remove the theme mods to avoid overwriting changes made via
* the Customizer when accessing wp-admin/widgets.php.
*/
if ( 'wp_ajax_customize_save' === current_action() ) {
}
update_option( 'theme_switched', $old_theme->get_stylesheet() );
+
/**
* Fires after the theme is switched.
*
* @since 1.5.0
+ * @since 4.5.0 Introduced the `$old_theme` parameter.
*
* @param string $new_name Name of the new theme.
* @param WP_Theme $new_theme WP_Theme instance of the new theme.
+ * @param WP_Theme $old_theme WP_Theme instance of the old theme.
*/
- do_action( 'switch_theme', $new_name, $new_theme );
+ do_action( 'switch_theme', $new_name, $new_theme, $old_theme );
}
/**
*
* @since 2.7.0
*
- * @param bool true Validation flag to check the current theme.
+ * @param bool $validate Whether to validate the current theme. Default true.
*/
if ( wp_installing() || ! apply_filters( 'validate_current_theme', true ) )
return true;
}
/**
- * Retrieve text color for custom header.
+ * Retrieves the custom header text color in HEX format.
*
* @since 2.1.0
*
- * @return string
+ * @return string Header text color in HEX format (minus the hash symbol).
*/
function get_header_textcolor() {
return get_theme_mod('header_textcolor', get_theme_support( 'custom-header', 'default-text-color' ) );
}
/**
- * Display text color for custom header.
+ * Displays the custom header text color in HEX format (minus the hash symbol).
*
* @since 2.1.0
*/
foreach ( (array) $headers as $header ) {
$url = esc_url_raw( wp_get_attachment_url( $header->ID ) );
$header_data = wp_get_attachment_metadata( $header->ID );
- $header_index = basename($url);
+ $header_index = $header->ID;
$header_images[$header_index] = array();
$header_images[$header_index]['attachment_id'] = $header->ID;
$args[0] = array_merge( $_wp_theme_features['html5'][0], $args[0] );
break;
+ case 'custom-logo':
+ if ( ! is_array( $args ) ) {
+ $args = array( 0 => array() );
+ }
+ $defaults = array(
+ 'width' => null,
+ 'height' => null,
+ 'flex-width' => false,
+ 'flex-height' => false,
+ 'header-text' => '',
+ );
+ $args[0] = wp_parse_args( array_intersect_key( $args[0], $defaults ), $defaults );
+
+ // Allow full flexibility if no size is specified.
+ if ( is_null( $args[0]['width'] ) && is_null( $args[0]['height'] ) ) {
+ $args[0]['flex-width'] = true;
+ $args[0]['flex-height'] = true;
+ }
+ break;
+
case 'custom-header-uploads' :
return add_theme_support( 'custom-header', array( 'uploads' => true ) );
}
}
+/**
+ * Adds CSS to hide header text for custom logo, based on Customizer setting.
+ *
+ * @since 4.5.0
+ * @access private
+ */
+function _custom_logo_header_styles() {
+ if ( ! current_theme_supports( 'custom-header', 'header-text' ) && get_theme_support( 'custom-logo', 'header-text' ) && ! get_theme_mod( 'header_text', true ) ) {
+ $classes = (array) get_theme_support( 'custom-logo', 'header-text' );
+ $classes = array_map( 'sanitize_html_class', $classes );
+ $classes = '.' . implode( ', .', $classes );
+
+ ?>
+ <!-- Custom Logo: hide header text -->
+ <style id="custom-logo-css" type="text/css">
+ <?php echo $classes; ?> {
+ position: absolute;
+ clip: rect(1px, 1px, 1px, 1px);
+ }
+ </style>
+ <?php
+ }
+}
+
/**
* Gets the theme support arguments passed when registering that support
*
$args = array_slice( func_get_args(), 1 );
switch ( $feature ) {
+ case 'custom-logo' :
case 'custom-header' :
case 'custom-background' :
if ( isset( $_wp_theme_features[ $feature ][0][ $args[0] ] ) )
$type = $args[0];
return in_array( $type, $_wp_theme_features[$feature][0] );
+ case 'custom-logo':
case 'custom-header':
- case 'custom-background' :
- // specific custom header and background capabilities can be registered by passing
- // an array to add_theme_support()
- $header_support = $args[0];
- return ( isset( $_wp_theme_features[$feature][0][$header_support] ) && $_wp_theme_features[$feature][0][$header_support] );
+ case 'custom-background':
+ // Specific capabilities can be registered by passing an array to add_theme_support().
+ return ( isset( $_wp_theme_features[ $feature ][0][ $args[0] ] ) && $_wp_theme_features[ $feature ][0][ $args[0] ] );
}
/**
*
* The dynamic portion of the hook name, `$feature`, refers to the specific theme
* feature. Possible values include 'post-formats', 'post-thumbnails', 'custom-background',
- * 'custom-header', 'menus', 'automatic-feed-links', and 'html5'.
+ * 'custom-header', 'menus', 'automatic-feed-links', 'html5', and `customize-selective-refresh-widgets`.
*
* @since 3.4.0
*
* @access private
* @since 3.0.0
* @since 4.3.0 Also removes `header_image_data`.
+ * @since 4.5.0 Also removes custom logo theme mods.
*
* @param int $id The attachment id.
*/
$attachment_image = wp_get_attachment_url( $id );
$header_image = get_header_image();
$background_image = get_background_image();
+ $custom_logo_id = get_theme_mod( 'custom_logo' );
+
+ if ( $custom_logo_id && $custom_logo_id == $id ) {
+ remove_theme_mod( 'custom_logo' );
+ remove_theme_mod( 'header_text' );
+ }
if ( $header_image && $header_image == $attachment_image ) {
remove_theme_mod( 'header_image' );