Make WordPress Core

Ticket #18959: multiple-header-images.diff

File multiple-header-images.diff, 7.7 KB (added by jphase, 10 years ago)

Allow multiple header images

  • .

  • wp-admin/custom-header.php

    Property changes on: .
    ___________________________________________________________________
    Added: svn:ignore
    ## -0,0 +1 ##
    +wp-config.php
     
    278278                                set_theme_mod( 'header_textcolor', 'blank' );
    279279                }
    280280
    281                 if ( isset( $_POST['default-header'] ) ) {
     281                if ( isset ( $_POST['random-header'] ) ) {
    282282                        check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
     283                        $this->set_header_image( $_POST['random-header'] );
     284                        return;
     285                } elseif ( isset( $_POST['default-header'] ) && is_array( $_POST['default-header'] ) && count( $_POST['default-header'] ) ) {
     286                        check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
    283287                        $this->set_header_image( $_POST['default-header'] );
    284288                        return;
    285289                }
     
    330334
    331335                if ( 1 < count( $headers ) ) {
    332336                        echo '<div class="random-header">';
    333                         echo '<label><input name="default-header" type="radio" value="random-' . $type . '-image"' . checked( is_random_header_image( $type ), true, false ) . ' />';
     337                        echo '<label><input name="random-header" type="radio" value="random-' . $type . '-image"' . checked( is_random_header_image( $type ), true, false ) . ' />';
    334338                        echo __( '<strong>Random:</strong> Show a different image on each page.' );
    335339                        echo '</label>';
    336340                        echo '</div>';
     
    341345                        $header_thumbnail = $header['thumbnail_url'];
    342346                        $header_url = $header['url'];
    343347                        $header_desc = empty( $header['description'] ) ? '' : $header['description'];
     348                        if ( is_array( get_theme_mod( 'header_image' ) ) ) {
     349                                $checked = checked( in_array( $header_url, get_theme_mod( 'header_image' ) ), true, false );
     350                        } else {
     351                                $checked = checked( $header_url, get_theme_mod( 'header_image' ), false );
     352                        }
    344353                        echo '<div class="default-header">';
    345                         echo '<label><input name="default-header" type="radio" value="' . esc_attr( $header_key ) . '" ' . checked( $header_url, get_theme_mod( 'header_image' ), false ) . ' />';
     354                        echo '<label><input name="default-header[]" type="checkbox" value="' . esc_attr( $header_key ) . '" ' . $checked . ' />';
    346355                        $width = '';
    347356                        if ( !empty( $header['attachment_id'] ) )
    348357                                $width = ' width="230"';
     
    10061015         * @since 3.4.0
    10071016         */
    10081017        final public function set_header_image( $choice ) {
    1009                 if ( is_array( $choice ) || is_object( $choice ) ) {
     1018                if ( is_array($choice) || is_object( $choice ) ) {
    10101019                        $choice = (array) $choice;
    1011                         if ( ! isset( $choice['attachment_id'] ) || ! isset( $choice['url'] ) )
    1012                                 return;
     1020                        if ( ! isset( $choice['attachment_id'] ) || ! isset( $choice['url'] ) ) {
     1021                                $header_image_data = $header_image = array();
     1022                                $this->process_default_headers();
     1023                                $uploaded = get_uploaded_header_images();
    10131024
    1014                         $choice['url'] = esc_url_raw( $choice['url'] );
     1025                                foreach ( $choice as $image ) {
     1026                                        if ( $uploaded && isset( $uploaded[ $image ] ) ) {
     1027                                                $image = $uploaded[ $image ];
     1028                                        } elseif ( isset( $this->default_headers[ $image ] ) ) {
     1029                                                $image = $this->default_headers[ $image ];
     1030                                        } elseif ( is_string( $image ) ) {
     1031                                                $image = array( 'url' => $image );
     1032                                        }
    10151033
    1016                         $header_image_data = (object) array(
    1017                                 'attachment_id' => $choice['attachment_id'],
    1018                                 'url'           => $choice['url'],
    1019                                 'thumbnail_url' => $choice['url'],
    1020                                 'height'        => $choice['height'],
    1021                                 'width'         => $choice['width'],
    1022                         );
     1034                                        $image['url'] = esc_url_raw( $image['url'] );
     1035                                        if( ! isset( $image['attachment_id'] ) || ! isset( $image['url'] ) ) {
     1036                                                $header_image_data[] = $image;
     1037                                        } else {
     1038                                                $header_image_data[] = (object) array(
     1039                                                        'attachment_id' => $image['attachment_id'],
     1040                                                        'url'                   => $image['url'],
     1041                                                        'thumbnail_url' => $image['url'],
     1042                                                        'height'        => $image['height'],
     1043                                                        'width'         => $image['width'],
     1044                                                );
    10231045
    1024                         update_post_meta( $choice['attachment_id'], '_wp_attachment_is_custom_header', get_stylesheet() );
    1025                         set_theme_mod( 'header_image', $choice['url'] );
    1026                         set_theme_mod( 'header_image_data', $header_image_data );
     1046                                                update_post_meta( $image['attachment_id'], '_wp_attachment_is_custom_header', get_stylesheet() );
     1047                                        }
     1048
     1049                                        $header_image[] = $image['url'];
     1050                                }
     1051
     1052                                set_theme_mod( 'header_image', $header_image );
     1053                                set_theme_mod( 'header_image_data', $header_image_data );
     1054                        } else {
     1055                                $choice['url'] = esc_url_raw( $choice['url'] );
     1056
     1057                                $header_image_data = get_theme_mod( 'header_image_data' );
     1058                                $header_image = get_theme_mod( 'header_image' );
     1059
     1060                                $header_image_data[] = (object) array(
     1061                                        'attachment_id' => $choice['attachment_id'],
     1062                                        'url'           => $choice['url'],
     1063                                        'thumbnail_url' => $choice['url'],
     1064                                        'height'        => $choice['height'],
     1065                                        'width'         => $choice['width'],
     1066                                );
     1067                                $header_image[] = $choice['url'];
     1068
     1069                                update_post_meta( $choice['attachment_id'], '_wp_attachment_is_custom_header', get_stylesheet() );
     1070                                set_theme_mod( 'header_image', $header_image );
     1071                                set_theme_mod( 'header_image_data', $header_image_data );
     1072                        }
    10271073                        return;
    10281074                }
    10291075
     
    10361082                $uploaded = get_uploaded_header_images();
    10371083                if ( $uploaded && isset( $uploaded[ $choice ] ) ) {
    10381084                        $header_image_data = $uploaded[ $choice ];
    1039 
    10401085                } else {
    10411086                        $this->process_default_headers();
    10421087                        if ( isset( $this->default_headers[ $choice ] ) )
     
    10451090                                return;
    10461091                }
    10471092
    1048                 set_theme_mod( 'header_image', esc_url_raw( $header_image_data['url'] ) );
     1093                set_theme_mod( 'header_image', $header_image );
    10491094                set_theme_mod( 'header_image_data', $header_image_data );
    10501095        }
    10511096
  • wp-admin/js/custom-header.js

     
    66                // Fetch available headers and apply jQuery.masonry
    77                // once the images have loaded.
    88                var $headers = $('.available-headers');
     9                var $random = $('.random-header input[type="radio"]');
     10                var $images = $('.available-headers input[type="checkbox"]');
    911
    1012                $headers.imagesLoaded( function() {
    1113                        $headers.masonry({
     
    1416                        });
    1517                });
    1618
     19                // Uncheck selected header images when random radio is selected
     20                $random.on( 'click', function() {
     21                        $images.removeAttr('checked');
     22                });
     23
     24                // Uncheck random radio when header images are selected
     25                $images.on( 'click', function() {
     26                        if ( $images.is(':checked') ) $random.removeAttr('checked');
     27                });
     28
    1729                // Build the choose from library frame.
    1830                $('#choose-from-library-link').click( function( event ) {
    1931                        var $el = $(this);
  • wp-includes/theme.php

     
    10401040        if ( 'remove-header' == $url )
    10411041                return false;
    10421042
    1043         if ( is_random_header_image() )
     1043        if ( is_random_header_image() ) {
    10441044                $url = get_random_header_image();
     1045        } elseif ( is_array( $url ) ) {
     1046                return esc_url_raw( set_url_scheme( get_random_header_image( $url ) ) );
     1047        }
    10451048
    10461049        return esc_url_raw( set_url_scheme( $url ) );
    10471050}
     
    10911094 *
    10921095 * @since 3.2.0
    10931096 *
     1097 * @param array $paths Optional paths of header images to randomize from
    10941098 * @return string Path to header image
    10951099 */
    10961100
    1097 function get_random_header_image() {
     1101function get_random_header_image( $paths = false ) {
     1102        if( $paths ) {
     1103                return $paths[ array_rand( $paths ) ];
     1104        }
     1105
    10981106        $random_image = _get_random_header_data();
    10991107        if ( empty( $random_image->url ) )
    11001108                return '';