/**
* Callback for administration header.
*
- * @var callback
+ * @var callable
* @since 2.1.0
*/
public $admin_header_callback;
/**
* Callback for header div.
*
- * @var callback
+ * @var callable
* @since 3.0.0
*/
public $admin_image_div_callback;
public $default_headers = array();
/**
+ * Used to trigger a success message when settings updated and set to true.
+ *
+ * @since 3.0.0
+ * @access private
* @var bool
*/
private $updated;
* Constructor - Register administration header callback.
*
* @since 2.1.0
- * @param callback $admin_header_callback
- * @param callback $admin_image_div_callback Optional custom image div output callback.
+ * @param callable $admin_header_callback
+ * @param callable $admin_image_div_callback Optional custom image div output callback.
*/
public function __construct($admin_header_callback, $admin_image_div_callback = '') {
$this->admin_header_callback = $admin_header_callback;
* Random image option is on by default if no header has been set.
*
* @since 3.0.0
+ *
+ * @param string $type The header type. One of 'default' (for the Uploaded Images control)
+ * or 'uploaded' (for the Uploaded Images control).
*/
public function show_header_selector( $type = 'default' ) {
if ( 'default' == $type ) {
foreach ( $headers as $header_key => $header ) {
$header_thumbnail = $header['thumbnail_url'];
$header_url = $header['url'];
- $header_desc = empty( $header['description'] ) ? '' : $header['description'];
- $header_alt_text = empty( $header['alt_text'] ) ? $header_desc : $header['alt_text'];
+ $header_alt_text = empty( $header['alt_text'] ) ? '' : $header['alt_text'];
echo '<div class="default-header">';
echo '<label><input name="default-header" type="radio" value="' . esc_attr( $header_key ) . '" ' . checked( $header_url, get_theme_mod( 'header_image' ), false ) . ' />';
$width = '';
if ( !empty( $header['attachment_id'] ) )
$width = ' width="230"';
- echo '<img src="' . set_url_scheme( $header_thumbnail ) . '" alt="' . esc_attr( $header_alt_text ) .'" title="' . esc_attr( $header_desc ) . '"' . $width . ' /></label>';
+ echo '<img src="' . set_url_scheme( $header_thumbnail ) . '" alt="' . esc_attr( $header_alt_text ) .'"' . $width . ' /></label>';
echo '</div>';
}
echo '<div class="clear"></div></div>';
printf( __( 'Images of exactly <strong>%1$d × %2$d pixels</strong> will be used as-is.' ) . '<br />', get_theme_support( 'custom-header', 'width' ), get_theme_support( 'custom-header', 'height' ) );
} elseif ( current_theme_supports( 'custom-header', 'flex-height' ) ) {
if ( ! current_theme_supports( 'custom-header', 'flex-width' ) )
- printf( __( 'Images should be at least <strong>%1$d pixels</strong> wide.' ) . ' ', get_theme_support( 'custom-header', 'width' ) );
+ printf(
+ /* translators: %s: size in pixels */
+ __( 'Images should be at least %s wide.' ) . ' ',
+ sprintf(
+ /* translators: %d: custom header width */
+ '<strong>' . __( '%d pixels' ) . '</strong>',
+ get_theme_support( 'custom-header', 'width' )
+ )
+ );
} elseif ( current_theme_supports( 'custom-header', 'flex-width' ) ) {
if ( ! current_theme_supports( 'custom-header', 'flex-height' ) )
- printf( __( 'Images should be at least <strong>%1$d pixels</strong> tall.' ) . ' ', get_theme_support( 'custom-header', 'height' ) );
+ printf(
+ /* translators: %s: size in pixels */
+ __( 'Images should be at least %s tall.' ) . ' ',
+ sprintf(
+ /* translators: %d: custom header height */
+ '<strong>' . __( '%d pixels' ) . '</strong>',
+ get_theme_support( 'custom-header', 'height' )
+ )
+ );
}
if ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) {
if ( current_theme_supports( 'custom-header', 'width' ) )
- printf( __( 'Suggested width is <strong>%1$d pixels</strong>.' ) . ' ', get_theme_support( 'custom-header', 'width' ) );
+ printf(
+ /* translators: %s: size in pixels */
+ __( 'Suggested width is %s.' ) . ' ',
+ sprintf(
+ /* translators: %d: custom header width */
+ '<strong>' . __( '%d pixels' ) . '</strong>',
+ get_theme_support( 'custom-header', 'width' )
+ )
+ );
if ( current_theme_supports( 'custom-header', 'height' ) )
- printf( __( 'Suggested height is <strong>%1$d pixels</strong>.' ) . ' ', get_theme_support( 'custom-header', 'height' ) );
+ printf(
+ /* translators: %s: size in pixels */
+ __( 'Suggested height is %s.' ) . ' ',
+ sprintf(
+ /* translators: %d: custom header height */
+ '<strong>' . __( '%d pixels' ) . '</strong>',
+ get_theme_support( 'custom-header', 'height' )
+ )
+ );
}
?></p>
<form enctype="multipart/form-data" id="upload-form" class="wp-upload-form" method="post" action="<?php echo esc_url( add_query_arg( 'step', 2 ) ) ?>">
*/
public function step_2() {
check_admin_referer('custom-header-upload', '_wpnonce-custom-header-upload');
- if ( ! current_theme_supports( 'custom-header', 'uploads' ) )
- wp_die( __( 'Cheatin’ uh?' ), 403 );
+ if ( ! current_theme_supports( 'custom-header', 'uploads' ) ) {
+ wp_die(
+ '<h1>' . __( 'Cheatin’ uh?' ) . '</h1>' .
+ '<p>' . __( 'The current theme does not support uploading a custom header image.' ) . '</p>',
+ 403
+ );
+ }
if ( empty( $_POST ) && isset( $_GET['file'] ) ) {
$attachment_id = absint( $_GET['file'] );
<p class="hide-if-js"><strong><?php _e( 'You need JavaScript to choose a part of the image.'); ?></strong></p>
<div id="crop_image" style="position: relative">
- <img src="<?php echo esc_url( $url ); ?>" id="upload" width="<?php echo $width; ?>" height="<?php echo $height; ?>" />
+ <img src="<?php echo esc_url( $url ); ?>" id="upload" width="<?php echo $width; ?>" height="<?php echo $height; ?>" alt="" />
</div>
<input type="hidden" name="x1" id="x1" value="0"/>
* Display third step of custom header image page.
*
* @since 2.1.0
+ * @since 4.4.0 Switched to using wp_get_attachment_url() instead of the guid
+ * for retrieving the header image URL.
*/
public function step_3() {
check_admin_referer( 'custom-header-crop-image' );
- if ( ! current_theme_supports( 'custom-header', 'uploads' ) )
- wp_die( __( 'Cheatin’ uh?' ), 403 );
+ if ( ! current_theme_supports( 'custom-header', 'uploads' ) ) {
+ wp_die(
+ '<h1>' . __( 'Cheatin’ uh?' ) . '</h1>' .
+ '<p>' . __( 'The current theme does not support uploading a custom header image.' ) . '</p>',
+ 403
+ );
+ }
- if ( ! empty( $_POST['skip-cropping'] ) && ! ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) )
- wp_die( __( 'Cheatin’ uh?' ), 403 );
+ if ( ! empty( $_POST['skip-cropping'] ) && ! ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) ) {
+ wp_die(
+ '<h1>' . __( 'Cheatin’ uh?' ) . '</h1>' .
+ '<p>' . __( 'The current theme does not support a flexible sized header image.' ) . '</p>',
+ 403
+ );
+ }
if ( $_POST['oitar'] > 1 ) {
$_POST['x1'] = $_POST['x1'] * $_POST['oitar'];
// Update the attachment
$attachment_id = $this->insert_attachment( $object, $cropped );
- $url = $object['guid'];
+ $url = wp_get_attachment_url( $attachment_id );
$this->set_header_image( compact( 'url', 'attachment_id', 'width', 'height' ) );
// Cleanup.
* Choose a header image, selected from existing uploaded and default headers,
* or provide an array of uploaded header data (either new, or from media library).
*
+ * @since 3.4.0
+ *
* @param mixed $choice Which header image to select. Allows for values of 'random-default-image',
* for randomly cycling among the default images; 'random-uploaded-image', for randomly cycling
* among the uploaded images; the key of a default image registered for that theme; and
- * the key of an image uploaded for that theme (the basename of the URL).
+ * the key of an image uploaded for that theme (the attachment ID of the image).
* Or an array of arguments: attachment_id, url, width, height. All are required.
- *
- * @since 3.4.0
- *
- * @param array|object|string $choice
*/
final public function set_header_image( $choice ) {
if ( is_array( $choice ) || is_object( $choice ) ) {
*/
final public function create_attachment_object( $cropped, $parent_attachment_id ) {
$parent = get_post( $parent_attachment_id );
- $parent_url = $parent->guid;
+ $parent_url = wp_get_attachment_url( $parent->ID );
$url = str_replace( basename( $parent_url ), basename( $cropped ), $parent_url );
$size = @getimagesize( $cropped );
$object = array(
'ID' => $parent_attachment_id,
'post_title' => basename($cropped),
- 'post_content' => $url,
'post_mime_type' => $image_type,
'guid' => $url,
'context' => 'custom-header'
$new_attachment_id = $this->insert_attachment( $object, $cropped );
$object['attachment_id'] = $new_attachment_id;
+ $object['url'] = wp_get_attachment_url( $new_attachment_id );;
$object['width'] = $dimensions['dst_width'];
$object['height'] = $dimensions['dst_height'];