WordPress.org

Make WordPress Core

Ticket #17240: 17240.2.diff

File 17240.2.diff, 8.6 KB (added by ryan, 7 years ago)

Separate default and uploaded

  • wp-includes/theme.php

     
    14271427 */
    14281428function get_header_image() {
    14291429        $default = defined( 'HEADER_IMAGE' ) ? HEADER_IMAGE : '';
    1430 
    14311430        $url = get_theme_mod( 'header_image', $default );
    14321431
     1432        if ( is_random_header_image() ) {
     1433                $url = get_random_header_image();
     1434        }
     1435
    14331436        if ( is_ssl() )
    14341437                $url = str_replace( 'http://', 'https://', $url );
    14351438        else
     
    14391442}
    14401443
    14411444/**
     1445 * Get random header image from registered images in theme.
     1446 *
     1447 * @since 3.2
     1448 *
     1449 * @return string Path to header image
     1450 */
     1451function get_random_header_image() {
     1452        global $_wp_default_headers;
     1453
     1454        $header_image_mod = get_theme_mod( 'header_image', '' );
     1455        $headers = array();
     1456
     1457        if ( 'random-uploaded-image' == $header_image_mod ) {
     1458                $headers = get_uploaded_header_images();
     1459        } elseif ( !empty( $_wp_default_headers ) ) {
     1460                $headers = $_wp_default_headers;
     1461        }
     1462
     1463        if ( empty( $headers ) )
     1464                return '';
     1465
     1466        $random_image = array_rand( $headers );
     1467        $header_url = sprintf( $headers[$random_image]['url'], get_template_directory_uri(), get_stylesheet_directory_uri() );
     1468
     1469        return $header_url;
     1470}
     1471
     1472/**
     1473 * Check if random header image is in use.
     1474 *
     1475 * Always true if user expressly chooses the option in Appearance > Header.
     1476 * Also true if theme has multiple header images registered and no specific header image is chosen.
     1477 *
     1478 * @since 3.2
     1479 * @uses HEADER_IMAGE
     1480 *
     1481 * @param string $type The random pool to use. any|default|uploaded
     1482 * @return boolean
     1483 */
     1484function is_random_header_image( $type = 'any' ) {
     1485        $default = defined( 'HEADER_IMAGE' ) ? HEADER_IMAGE : '';
     1486        $header_image_mod = get_theme_mod( 'header_image', $default );
     1487
     1488        if ( 'any' == $type ) {
     1489                if ( 'random-default-image' == $header_image_mod || 'random-uploaded-image' == $header_image_mod || ( '' != get_random_header_image() && empty( $header_image_mod ) ) )
     1490                        return true;
     1491        } else {
     1492                if ( "random-$type-image" == $header_image_mod )
     1493                        return true;
     1494        }
     1495
     1496        return false;
     1497}
     1498
     1499/**
    14421500 * Display header image path.
    14431501 *
    14441502 * @since 2.1.0
     
    14481506}
    14491507
    14501508/**
     1509 * Get the header images uploaded for the current theme.
     1510 *
     1511 * @since 3.2.0
     1512 *
     1513 * @return array
     1514 */
     1515function get_uploaded_header_images() {
     1516        $header_images = array();
     1517
     1518        // @todo caching
     1519        $headers = get_posts( array( 'post_type' => 'attachment', 'meta_key' => '_wp_attachment_is_custom_header', 'meta_value' => get_option('stylesheet'), 'orderby' => 'none', 'nopaging' => true ) );
     1520
     1521        if ( empty( $headers ) )
     1522                return array();
     1523
     1524        foreach ( (array) $headers as $header ) {
     1525                $url = $header->guid;
     1526                $header = basename($url);
     1527                $header_images[$header] = array();
     1528                $header_images[$header]['url'] =  $url;
     1529                $header_images[$header]['thumbnail_url'] =  $url;
     1530                $header_images[$header]['uploaded'] = true;
     1531        }
     1532
     1533        return $header_images;
     1534}
     1535
     1536/**
    14511537 * Add callbacks for image header display.
    14521538 *
    14531539 * The parameter $header_callback callback will be required to display the
  • wp-admin/custom-header.php

     
    4242         */
    4343        var $default_headers = array();
    4444
     45
    4546        /**
     47         * Holds custom headers uploaded by the user
     48         *
     49         * @var array
     50         * @since 3.2.0
     51         * @access private
     52         */
     53        var $uploaded_headers = array();
     54
     55        /**
    4656         * Holds the page menu hook.
    4757         *
    4858         * @var string
     
    199209                        }
    200210                }
    201211
    202                 if ( isset($_POST['default-header']) ) {
     212                if ( isset( $_POST['default-header'] ) ) {
    203213                        check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
    204                         $this->process_default_headers();
    205                         if ( isset($this->default_headers[$_POST['default-header']]) )
    206                                 set_theme_mod('header_image', esc_url($this->default_headers[$_POST['default-header']]['url']));
     214                        if ( 'random-default-image' == $_POST['default-header'] ) {
     215                                set_theme_mod( 'header_image', 'random-default-image' );
     216                        } elseif ( 'random-uploaded-image' == $_POST['default-header'] ) {
     217                                set_theme_mod( 'header_image', 'random-uploaded-image' );
     218                        } else {
     219                                $this->process_default_headers();
     220                                $uploaded = get_uploaded_header_images();
     221                                if ( isset( $uploaded[$_POST['default-header']] ) )
     222                                        set_theme_mod( 'header_image', esc_url( $uploaded[$_POST['default-header']]['url'] ) );
     223                                elseif ( isset( $this->default_headers[$_POST['default-header']] ) )
     224                                        set_theme_mod( 'header_image', esc_url( $this->default_headers[$_POST['default-header']]['url'] ) );
     225                        }
    207226                }
    208227        }
    209228
     
    226245                        $this->default_headers[$header]['url'] =  sprintf( $this->default_headers[$header]['url'], get_template_directory_uri(), get_stylesheet_directory_uri() );
    227246                        $this->default_headers[$header]['thumbnail_url'] =  sprintf( $this->default_headers[$header]['thumbnail_url'], get_template_directory_uri(), get_stylesheet_directory_uri() );
    228247                }
     248
    229249        }
    230250
    231251        /**
    232252         * Display UI for selecting one of several default headers.
    233253         *
     254         * Show the random image option if this theme has multiple header images.
     255         * Random image option is on by default if no header has been set.
     256         *
    234257         * @since 3.0.0
    235258         */
    236         function show_default_header_selector() {
     259        function show_header_selector( $type = 'default' ) {
    237260                echo '<div id="available-headers">';
    238                 foreach ( $this->default_headers as $header_key => $header ) {
     261                if ( 'default' == $type ) {
     262                        $headers = $this->default_headers;
     263                } else {
     264                        $headers = get_uploaded_header_images();
     265                        $type = 'uploaded';
     266                }
     267
     268                foreach ( $headers as $header_key => $header ) {
    239269                        $header_thumbnail = $header['thumbnail_url'];
    240270                        $header_url = $header['url'];
    241                         $header_desc = $header['description'];
     271                        $header_desc = empty( $header['description'] ) ? '' : $header['description'];
    242272                        echo '<div class="default-header">';
    243                         echo '<label><input name="default-header" type="radio" value="' . esc_attr($header_key) . '" ' . checked($header_url, get_theme_mod( 'header_image' ), false) . ' />';
    244                         echo '<img src="' . $header_thumbnail . '" alt="' . esc_attr($header_desc) .'" title="' . esc_attr($header_desc) .'" /></label>';
     273                        echo '<label><input name="default-header" type="radio" value="' . esc_attr( $header_key ) . '" ' . checked( $header_url, get_theme_mod( 'header_image' ), false ) . ' />';
     274                        $width = '';
     275                        if ( !empty( $header['uploaded'] ) )
     276                                $width = ' width="230"';
     277                        echo '<img src="' . $header_thumbnail . '" alt="' . esc_attr( $header_desc ) .'" title="' . esc_attr( $header_desc ) . '"' . $width . ' /></label>';
    245278                        echo '</div>';
    246279                }
     280                if ( 1 < count( $headers ) ) {
     281                        echo '<div class="default-header">';
     282                        echo '<label><input name="default-header" type="radio" value="random-' . $type . '-image"' . checked( is_random_header_image( $type ), true, false ) . ' />';
     283                        echo __( '<strong>Random:</strong> Show a different image on each page.' );
     284                        echo '</label>';
     285                        echo '</div>';
     286                }
    247287                echo '<div class="clear"></div></div>';
    248288        }
    249289
     
    480520<form method="post" action="<?php echo esc_attr( add_query_arg( 'step', 1 ) ) ?>">
    481521<table class="form-table">
    482522<tbody>
    483         <?php if ( ! empty( $this->default_headers ) ) : ?>
     523        <?php if ( get_uploaded_header_images() ) : ?>
    484524<tr valign="top">
     525<th scope="row"><?php _e( 'Uploaded Images' ); ?></th>
     526<td>
     527        <p><?php _e( 'You can use one of your previously uploaded headers.' ) ?></p>
     528        <?php
     529                $this->show_header_selector( 'uploaded' );
     530        ?>
     531</td>
     532</tr>
     533        <?php endif;
     534        if ( ! empty( $this->default_headers ) ) : ?>
     535<tr valign="top">
    485536<th scope="row"><?php _e( 'Default Images' ); ?></th>
    486537<td>
    487538<?php if ( current_theme_supports( 'custom-header-uploads' ) ) : ?>
     
    490541        <p><?php _e( 'You can use one of these cool headers.' ) ?>
    491542<?php endif; ?>
    492543        <?php
    493                 $this->show_default_header_selector();
     544                $this->show_header_selector( 'default' );
    494545        ?>
    495546</td>
    496547</tr>
    497548        <?php endif;
    498 
    499         if ( get_header_image() ) : ?>
     549        if ( get_header_image() && !is_random_header_image() ) : ?>
    500550<tr valign="top">
    501551<th scope="row"><?php _e( 'Remove Image' ); ?></th>
    502552<td>
     
    506556</tr>
    507557        <?php endif;
    508558
    509         if ( defined( 'HEADER_IMAGE' ) ) : ?>
     559        if ( defined( 'HEADER_IMAGE' ) && !is_random_header_image() ) : ?>
    510560<tr valign="top">
    511561<th scope="row"><?php _e( 'Reset Image' ); ?></th>
    512562<td>
     
    693743                // Update the attachment
    694744                wp_insert_attachment($object, $cropped);
    695745                wp_update_attachment_metadata( $_POST['attachment_id'], wp_generate_attachment_metadata( $_POST['attachment_id'], $cropped ) );
     746                update_post_meta( $_POST['attachment_id'], '_wp_attachment_is_custom_header', get_option('stylesheet' ) );
    696747
    697748                set_theme_mod('header_image', $url);
    698749