WordPress.org

Make WordPress Core

Ticket #17240: 17240-random-2.diff

File 17240-random-2.diff, 4.6 KB (added by lancewillett, 3 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