WordPress.org

Make WordPress Core

Ticket #17240: 17240-random-2.diff

File 17240-random-2.diff, 4.6 KB (added by lancewillett, 7 years ago)

Second pass

  • wp-admin/custom-header.php

     
    199199                        }
    200200                }
    201201
    202                 if ( isset($_POST['default-header']) ) {
     202                if ( isset( $_POST['default-header'] ) ) {
    203203                        check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
    204204                        $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']));
     205                        if ( 'random-image' == $_POST['default-header'] )
     206                                set_theme_mod( 'header_image', 'random-image' );
     207                        if ( isset( $this->default_headers[$_POST['default-header']] ) )
     208                                set_theme_mod( 'header_image', esc_url( $this->default_headers[$_POST['default-header']]['url'] ) );
    207209                }
    208210        }
    209211
     
    231233        /**
    232234         * Display UI for selecting one of several default headers.
    233235         *
     236         * Show the random image option if this theme has multiple header images.
     237         * Random image option is on by default if no header has been set.
     238         *
    234239         * @since 3.0.0
    235240         */
    236241        function show_default_header_selector() {
     
    240245                        $header_url = $header['url'];
    241246                        $header_desc = $header['description'];
    242247                        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>';
     248                        echo '<label><input name="default-header" type="radio" value="' . esc_attr( $header_key ) . '" ' . checked( $header_url, get_theme_mod( 'header_image' ), false ) . ' />';
     249                        echo '<img src="' . $header_thumbnail . '" alt="' . esc_attr( $header_desc ) .'" title="' . esc_attr( $header_desc ) .'" /></label>';
    245250                        echo '</div>';
    246251                }
     252                if ( 0 < count( $this->default_headers ) ) {
     253                        echo '<div class="default-header">';
     254                        echo '<label><input name="default-header" type="radio" value="random-image"' . checked( is_random_header_image(), true, false ) . ' />';
     255                        echo __( '<strong>Random:</strong> Show a different image on each page.' );
     256                        echo '</label>';
     257                        echo '</div>';
     258                }
    247259                echo '<div class="clear"></div></div>';
    248260        }
    249261
     
    496508</tr>
    497509        <?php endif;
    498510
    499         if ( get_header_image() ) : ?>
     511        if ( get_header_image() && !is_random_header_image() ) : ?>
    500512<tr valign="top">
    501513<th scope="row"><?php _e( 'Remove Image' ); ?></th>
    502514<td>
     
    506518</tr>
    507519        <?php endif;
    508520
    509         if ( defined( 'HEADER_IMAGE' ) ) : ?>
     521        if ( defined( 'HEADER_IMAGE' ) && !is_random_header_image() ) : ?>
    510522<tr valign="top">
    511523<th scope="row"><?php _e( 'Reset Image' ); ?></th>
    512524<td>
  • 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        $header_url = '';
     1454
     1455        if ( !isset( $_wp_default_headers ) || empty( $_wp_default_headers ) )
     1456                return $header_url;
     1457
     1458        if ( 0 < count( $_wp_default_headers ) ) {
     1459                $random_image = array_rand( $_wp_default_headers );
     1460                $header_url = sprintf( $_wp_default_headers[$random_image]['url'], get_template_directory_uri(), get_stylesheet_directory_uri() );
     1461        }
     1462       
     1463        return $header_url;
     1464}
     1465
     1466/**
     1467 * Check if random header image is in use.
     1468 *
     1469 * Always true if user expressly chooses the option in Appearance > Header.
     1470 * Also true if theme has multiple header images registered and no specific header image is chosen.
     1471 *
     1472 * @since 3.2
     1473 * @uses HEADER_IMAGE
     1474 *
     1475 * @return boolean
     1476 */
     1477function is_random_header_image() {
     1478        $default = defined( 'HEADER_IMAGE' ) ? HEADER_IMAGE : '';
     1479        $header_image_mod = get_theme_mod( 'header_image', $default );
     1480
     1481        if ( 'random-image' == $header_image_mod || ( '' != get_random_header_image() && empty( $header_image_mod ) ) )
     1482                return true;
     1483       
     1484        return false;
     1485}
     1486
     1487/**
    14421488 * Display header image path.
    14431489 *
    14441490 * @since 2.1.0