WordPress.org

Make WordPress Core

Changeset 21037


Ignore:
Timestamp:
06/10/12 00:32:19 (23 months 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

Location:
trunk
Files:
6 edited

Legend:

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

    r21009 r21037  
    384384        update_post_meta( $id, '_wp_attachment_is_custom_background', get_option('stylesheet' ) ); 
    385385 
    386         set_theme_mod('background_image', esc_url($url)); 
     386        set_theme_mod('background_image', esc_url_raw($url)); 
    387387 
    388388        $thumbnail = wp_get_attachment_image_src( $id, 'thumbnail' ); 
    389         set_theme_mod('background_image_thumb', esc_url( $thumbnail[0] ) ); 
     389        set_theme_mod('background_image_thumb', esc_url_raw( $thumbnail[0] ) ); 
    390390 
    391391        do_action('wp_create_file_in_uploads', $file, $id); // For replication 
     
    426426        $url = wp_get_attachment_image_src( $attachment_id, $size ); 
    427427        $thumbnail = wp_get_attachment_image_src( $attachment_id, 'thumbnail' ); 
    428         set_theme_mod( 'background_image', esc_url( $url[0] ) ); 
    429         set_theme_mod( 'background_image_thumb', esc_url( $thumbnail[0] ) ); 
     428        set_theme_mod( 'background_image', esc_url_raw( $url[0] ) ); 
     429        set_theme_mod( 'background_image_thumb', esc_url_raw( $thumbnail[0] ) ); 
    430430        exit; 
    431431    } 
  • 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} 
  • trunk/wp-admin/js/customize-controls.dev.js

    r21033 r21037  
    240240            }); 
    241241 
     242            // Bind events to switch image urls. 
    242243            this.library.on( 'click', 'a', function( event ) { 
    243244                var value = $(this).data('customizeImageValue'); 
     
    264265                this.tabs.uploaded.both.removeClass('hidden'); 
    265266 
    266                 $( '<a href="#" class="thumbnail"></a>' ) 
     267                attachment.element = $( '<a href="#" class="thumbnail"></a>' ) 
    267268                    .data( 'customizeImageValue', attachment.url ) 
    268269                    .append( '<img src="' +  attachment.url+ '" />' ) 
     
    869870        }); 
    870871 
     872        // Handle header image data 
     873        api.control( 'header_image', function( control ) { 
     874            control.setting.bind( function( to ) { 
     875                if ( to === control.params.removed ) 
     876                    control.settings.data.set( false ); 
     877            }); 
     878 
     879            control.library.on( 'click', 'a', function( event ) { 
     880                control.settings.data.set( $(this).data('customizeHeaderImageData') ); 
     881            }); 
     882 
     883            control.uploader.success = function( attachment ) { 
     884                var data; 
     885 
     886                api.ImageControl.prototype.success.call( control, attachment ); 
     887 
     888                data = { 
     889                    attachment_id: attachment.id, 
     890                    url:           attachment.url, 
     891                    thumbnail_url: attachment.url, 
     892                    height:        attachment.meta.height, 
     893                    width:         attachment.meta.width 
     894                }; 
     895 
     896                attachment.element.data( 'customizeHeaderImageData', data ); 
     897                control.settings.data.set( data ); 
     898            } 
     899        }); 
     900 
    871901        api.trigger( 'ready' ); 
    872902    }); 
  • trunk/wp-includes/class-wp-customize-control.php

    r21014 r21037  
    1212    public $id; 
    1313 
     14    // All settings tied to the control. 
    1415    public $settings; 
    15     public $setting; 
     16 
     17    // The primary setting for the control (if there is one). 
     18    public $setting = 'default'; 
    1619 
    1720    public $priority          = 10; 
     
    456459        parent::__construct( $manager, 'header_image', array( 
    457460            'label'    => __( 'Header Image' ), 
     461            'settings' => array( 
     462                'default' => 'header_image', 
     463                'data'    => 'header_image_data', 
     464            ), 
    458465            'section'  => 'header_image', 
    459466            'context'  => 'custom-header', 
     
    471478    } 
    472479 
     480    public function print_header_image( $choice, $header ) { 
     481        $header['url']           = set_url_scheme( $header['url'] ); 
     482        $header['thumbnail_url'] = set_url_scheme( $header['thumbnail_url'] ); 
     483 
     484        $header_image_data = array( 'choice' => $choice ); 
     485        foreach ( array( 'attachment_id', 'width', 'height', 'url', 'thumbnail_url' ) as $key ) { 
     486            if ( isset( $header[ $key ] ) ) 
     487                $header_image_data[ $key ] = $header[ $key ]; 
     488        } 
     489 
     490 
     491        ?> 
     492        <a href="#" class="thumbnail" 
     493            data-customize-image-value="<?php echo esc_url( $header['url'] ); ?>" 
     494            data-customize-header-image-data="<?php echo esc_attr( json_encode( $header_image_data ) ); ?>"> 
     495            <img src="<?php echo esc_url( $header['thumbnail_url'] ); ?>" /> 
     496        </a> 
     497        <?php 
     498    } 
     499 
    473500    public function tab_uploaded() { 
    474501        $headers = get_uploaded_header_images(); 
     
    476503        ?><div class="uploaded-target"></div><?php 
    477504 
    478         foreach ( $headers as $header ) 
    479             $this->print_tab_image( $header['url'], $header['thumbnail_url'] ); 
     505        foreach ( $headers as $choice => $header ) 
     506            $this->print_header_image( $choice, $header ); 
    480507    } 
    481508 
     
    484511        $custom_image_header->process_default_headers(); 
    485512 
    486         foreach ( $custom_image_header->default_headers as $header ) 
    487             $this->print_tab_image( $header['url'], $header['thumbnail_url'] ); 
     513        foreach ( $custom_image_header->default_headers as $choice => $header ) 
     514            $this->print_header_image( $choice, $header ); 
    488515    } 
    489516} 
  • trunk/wp-includes/class-wp-customize-manager.php

    r21031 r21037  
    757757        ) ); 
    758758 
    759         $this->add_setting( 'header_image', array( 
     759        $this->add_setting( new WP_Customize_Filter_Setting( $this, 'header_image', array( 
    760760            'default'        => get_theme_support( 'custom-header', 'default-image' ), 
    761761            'theme_supports' => 'custom-header', 
    762         ) ); 
     762        ) ) ); 
     763 
     764        $this->add_setting( new WP_Customize_Header_Image_Setting( $this, 'header_image_data', array( 
     765            // 'default'        => get_theme_support( 'custom-header', 'default-image' ), 
     766            'theme_supports' => 'custom-header', 
     767        ) ) ); 
    763768 
    764769        $this->add_control( new WP_Customize_Header_Image_Control( $this ) ); 
  • trunk/wp-includes/class-wp-customize-setting.php

    r20936 r21037  
    368368    } 
    369369} 
     370 
     371/** 
     372 * A setting that is used to filter a value, but will not save the results. 
     373 * 
     374 * Results should be properly handled using another setting or callback. 
     375 */ 
     376class WP_Customize_Filter_Setting extends WP_Customize_Setting { 
     377    public function update() {} 
     378} 
     379 
     380/** 
     381 * A setting that is used to filter a value, but will not save the results. 
     382 * 
     383 * Results should be properly handled using another setting or callback. 
     384 */ 
     385class WP_Customize_Header_Image_Setting extends WP_Customize_Setting { 
     386    public $id = 'header_image_data'; 
     387 
     388    public function update( $value ) { 
     389        global $custom_image_header; 
     390 
     391        // If the value doesn't exist (removed or random), 
     392        // use the header_image value. 
     393        if ( ! $value ) 
     394            $value = $this->manager->get_setting('header_image')->post_value(); 
     395 
     396        if ( is_array( $value ) && isset( $value['choice'] ) ) 
     397            $custom_image_header->set_header_image( $value['choice'] ); 
     398        else 
     399            $custom_image_header->set_header_image( $value ); 
     400    } 
     401} 
Note: See TracChangeset for help on using the changeset viewer.