Make WordPress Core


Ignore:
Timestamp:
06/10/2012 12:32:19 AM (14 years ago)
Author:
ryan
Message:
  • Introduce remove_header_image(), reset_header_image(), set_header_image(), and get_header_image_data() for Custom_Image_Header.
  • Handle all set/get of header theme mod through these methods.
  • Use these methods in the customizer.

Props kovshenin, nacin, SergeyBiryukov, koopersmith.
fixes #20871

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/custom-header.php

    r21009 r21037  
    212212        if ( isset( $_POST['resetheader'] ) ) {
    213213            check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
    214             $this->process_default_headers();
    215             $default = get_theme_support( 'custom-header', 'default-image' );
    216             $default = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() );
    217             foreach ( $this->default_headers as $header => $details ) {
    218                 if ( $details['url'] == $default ) {
    219                     $default_data = $details;
    220                     break;
    221                 }
    222             }
    223             set_theme_mod( 'header_image', $default );
    224             if ( empty( $default_data['width'] ) )
    225                 $default_data['width'] = get_theme_support( 'custom-header', 'width' );
    226             if ( empty( $default_data['height'] ) )
    227                 $default_data['height'] = get_theme_support( 'custom-header', 'height' );
    228             set_theme_mod( 'header_image_data', (object) $default_data );
     214            $this->reset_header_image();
    229215            return;
    230216        }
     
    238224        if ( isset( $_POST['removeheader'] ) ) {
    239225            check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
    240             set_theme_mod( 'header_image', 'remove-header' );
     226            $this->remove_header_image();
    241227            return;
    242228        }
     
    257243        if ( isset( $_POST['default-header'] ) ) {
    258244            check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
    259             if ( 'random-default-image' == $_POST['default-header'] ) {
    260                 set_theme_mod( 'header_image', 'random-default-image' );
    261             } elseif ( 'random-uploaded-image' == $_POST['default-header'] ) {
    262                 set_theme_mod( 'header_image', 'random-uploaded-image' );
    263             } else {
    264                 $this->process_default_headers();
    265                 $uploaded = get_uploaded_header_images();
    266                 if ( isset( $uploaded[$_POST['default-header']] ) ) {
    267                     set_theme_mod( 'header_image', esc_url( $uploaded[$_POST['default-header']]['url'] ) );
    268                     set_theme_mod( 'header_image_data', (object) $uploaded[$_POST['default-header']] );
    269                 } elseif ( isset( $this->default_headers[$_POST['default-header']] ) ) {
    270                     set_theme_mod( 'header_image', esc_url( $this->default_headers[$_POST['default-header']]['url'] ) );
    271                     if ( empty( $this->default_headers[$_POST['default-header']]['width'] ) )
    272                         $this->default_headers[$_POST['default-header']]['width'] = get_theme_support( 'custom-header', 'width' );
    273                     if ( empty( $this->default_headers[$_POST['default-header']]['height'] ) )
    274                         $this->default_headers[$_POST['default-header']]['height'] = get_theme_support( 'custom-header', 'height' );
    275                     set_theme_mod( 'header_image_data', (object) $this->default_headers[$_POST['default-header']] );
    276                 }
    277             }
     245            $this->set_header_image( $_POST['default-header'] );
     246            return;
    278247        }
    279248    }
     
    719688
    720689        if ( empty( $_POST ) && isset( $_GET['file'] ) ) {
    721             $id = absint( $_GET['file'] );
    722             $file = get_attached_file( $id, true );
    723             $url = wp_get_attachment_image_src( $id, 'full');
     690            $attachment_id = absint( $_GET['file'] );
     691            $file = get_attached_file( $attachment_id, true );
     692            $url = wp_get_attachment_image_src( $attachment_id, 'full');
    724693            $url = $url[0];
    725694        } elseif ( isset( $_POST ) ) {
     
    730699            list( $width, $height, $type, $attr ) = getimagesize( $file );
    731700        } else {
    732             $data = wp_get_attachment_metadata( $id );
     701            $data = wp_get_attachment_metadata( $attachment_id );
    733702            $height = $data[ 'height' ];
    734703            $width = $data[ 'width' ];
     
    751720            // Add the meta-data
    752721            if ( file_exists( $file ) )
    753                 wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) );
    754             update_post_meta( $id, '_wp_attachment_is_custom_header', get_option('stylesheet' ) );
    755 
    756             set_theme_mod('header_image', esc_url($url));
    757             do_action('wp_create_file_in_uploads', $file, $id); // For replication
     722                wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $file ) );
     723
     724            $this->set_header_image( compact( 'url', 'attachment_id', 'width', 'height' ) );
     725
     726            do_action('wp_create_file_in_uploads', $file, $attachment_id); // For replication
    758727            return $this->finished();
    759728        } elseif ( $width > $max_width ) {
    760729            $oitar = $width / $max_width;
    761             $image = wp_crop_image($id, 0, 0, $width, $height, $max_width, $height / $oitar, false, str_replace(basename($file), 'midsize-'.basename($file), $file));
     730            $image = wp_crop_image($attachment_id, 0, 0, $width, $height, $max_width, $height / $oitar, false, str_replace(basename($file), 'midsize-'.basename($file), $file));
    762731            if ( ! $image || is_wp_error( $image ) )
    763732                wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) );
    764733
    765             $image = apply_filters('wp_create_file_in_uploads', $image, $id); // For replication
     734            $image = apply_filters('wp_create_file_in_uploads', $image, $attachment_id); // For replication
    766735
    767736            $url = str_replace(basename($url), basename($image), $url);
     
    789758    <input type="hidden" name="width" id="width" value="<?php echo esc_attr( $width ); ?>"/>
    790759    <input type="hidden" name="height" id="height" value="<?php echo esc_attr( $height ); ?>"/>
    791     <input type="hidden" name="attachment_id" id="attachment_id" value="<?php echo esc_attr( $id ); ?>" />
     760    <input type="hidden" name="attachment_id" id="attachment_id" value="<?php echo esc_attr( $attachment_id ); ?>" />
    792761    <input type="hidden" name="oitar" id="oitar" value="<?php echo esc_attr( $oitar ); ?>" />
    793762    <?php if ( empty( $_POST ) && isset( $_GET['file'] ) ) { ?>
     
    836805
    837806        // Save the data
    838         $id = wp_insert_attachment( $object, $file );
    839         return compact( 'id', 'file', 'filename', 'url', 'type' );
     807        $attachment_id = wp_insert_attachment( $object, $file );
     808        return compact( 'attachment_id', 'file', 'filename', 'url', 'type' );
    840809    }
    841810
     
    919888        $attachment_id = wp_insert_attachment( $object, $cropped );
    920889        wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $cropped ) );
    921         update_post_meta( $attachment_id, '_wp_attachment_is_custom_header', get_option( 'stylesheet' ) );
    922 
    923         set_theme_mod('header_image', $url);
    924 
    925         $header_data                = new stdClass();
    926         $header_data->attachment_id = $attachment_id;
    927         $header_data->url           = $url;
    928         $header_data->thumbnail_url = $url;
    929         $header_data->width         = $dst_width;
    930         $header_data->height        = $dst_height;
    931 
    932         set_theme_mod( 'header_image_data', $header_data );
     890
     891        $width = $dst_width;
     892        $height = $dst_height;
     893        $this->set_header_image( compact( 'url', 'attachment_id', 'width', 'height' ) );
    933894
    934895        // cleanup
     
    998959    }
    999960
     961    /**
     962     * Choose a header image, selected from existing uploaded and default headers,
     963     * or provide an array of uploaded header data (either new, or from media library).
     964     *
     965     * @param mixed $choice Which header image to select. Allows for values of 'random-default-image',
     966     *  for randomly cycling among the default images; 'random-uploaded-image', for randomly cycling
     967     *  among the uploaded images; the key of a default image registered for that theme; and
     968     *  the key of an image uploaded for that theme (the basename of the URL).
     969     *  Or an array of arguments: attachment_id, url, width, height. All are required.
     970     *
     971     * @since 3.4.0
     972     */
     973    final public function set_header_image( $choice ) {
     974        if ( is_array( $choice ) || is_object( $choice ) ) {
     975            $choice = (array) $choice;
     976            if ( ! isset( $choice['attachment_id'] ) || ! isset( $choice['url'] ) )
     977                return;
     978
     979            $choice['url'] = esc_url_raw( $choice['url'] );
     980
     981            $header_image_data = (object) array(
     982                'attachment_id' => $choice['attachment_id'],
     983                'url'           => $choice['url'],
     984                'thumbnail_url' => $choice['url'],
     985                'height'        => $choice['height'],
     986                'width'         => $choice['width'],
     987            );
     988
     989            update_post_meta( $choice['attachment_id'], '_wp_attachment_is_custom_header', get_stylesheet() );
     990            set_theme_mod( 'header_image', $choice['url'] );
     991            set_theme_mod( 'header_image_data', $header_image_data );
     992            return;
     993        }
     994
     995        if ( in_array( $choice, array( 'remove-header', 'random-default-image', 'random-uploaded-image' ) ) ) {
     996            set_theme_mod( 'header_image', $choice );
     997            remove_theme_mod( 'header_image_data' );
     998            return;
     999        }
     1000
     1001        $uploaded = get_uploaded_header_images();
     1002        if ( $uploaded && isset( $uploaded[ $choice ] ) ) {
     1003            $header_image_data = $uploaded[ $choice ];
     1004
     1005        } else {
     1006            $this->process_default_headers();
     1007            if ( isset( $this->default_headers[ $choice ] ) )
     1008                $header_image_data = $this->default_headers[ $choice ];
     1009            else
     1010                return;
     1011        }
     1012
     1013        set_theme_mod( 'header_image', esc_url_raw( $header_image_data['url'] ) );
     1014        set_theme_mod( 'header_image_data', $header_image_data );
     1015    }
     1016
     1017    /**
     1018     * Remove a header image.
     1019     *
     1020     * @since 3.4.0
     1021     */
     1022    final public function remove_header_image() {
     1023        return $this->set_header_image( 'remove-header' );
     1024    }
     1025
     1026    /**
     1027     * Reset a header image to the default image for the theme.
     1028     *
     1029     * This method does not do anything if the theme does not have a default header image.
     1030     *
     1031     * @since 3.4.0
     1032     */
     1033    final public function reset_header_image() {
     1034        $this->process_default_headers();
     1035        $default = get_theme_support( 'custom-header', 'default-image' );
     1036
     1037        if ( ! $default )
     1038            return $this->remove_header_image();
     1039
     1040        $default = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() );
     1041
     1042        foreach ( $this->default_headers as $header => $details ) {
     1043            if ( $details['url'] == $default ) {
     1044                $default_data = $details;
     1045                break;
     1046            }
     1047        }
     1048
     1049        set_theme_mod( 'header_image', $default );
     1050        set_theme_mod( 'header_image_data', (object) $default_data );
     1051    }
    10001052}
Note: See TracChangeset for help on using the changeset viewer.