WordPress.org

Make WordPress Core


Ignore:
Timestamp:
03/19/2012 05:12:44 PM (9 years ago)
Author:
nacin
Message:

Introduce new registration methods for custom headers and custom backgrounds. Backwards compatible, but old methods will be deprecated. see #20249. see #17242.

Custom header: Use add_theme_support('custom-header', $args) instead of add_custom_image_header(). Deprecates all use of constants.

  • HEADER_TEXTCOLOR is now (string) 'default-text-color'.
  • NO_HEADER_TEXT is nowi ! (bool) 'header-text'.
  • HEADER_IMAGE_WIDTH (and _HEIGHT) are now (int) 'width' and 'height'.
  • HEADER_IMAGE is now (string) 'default-image'.
  • The 3.4 arguments 'suggested-width' and 'suggested-height' are now just 'width' and 'height' (they are "suggested" when flex-width and flex-height are set).
  • Callback arguments for add_custom_image_header() can now be passed to add_theme_support().

Custom background: Use add_theme_support('custom-background, $args) instead of add_custom_background(). Deprecates all use of constants.

  • BACKGROUND_COLOR is now (string) 'default-color'.
  • BACKGROUND_IMAGE is now (string) 'default-image'.
  • Callback arguments for add_custom_background() can now be passed to add_theme_support().

Inheritance: add_theme_support() arguments for custom headers and custom backgrounds is a first-one-wins situation. This is not an unusual paradigm for theming as a child theme (which is included first) overrides a parent theme.

  • Once an argument is explicitly set, it cannot be overridden. You must hook in earlier and set it first.
  • Any argument that is not explicitly set before WP is loaded will inherit the default value for that argument.
  • It is therefore possible for a child theme to pass minimal arguments as long as the parent theme specifies others that may be necessary.
  • Allows for a child theme to alter callbacks for <head> and preview (previously, calling add_custom_image_header more than once broke things).
  • The just-in-time bits ensure that arguments fall back to default values, that the values of all constants are considered (such as one defined after an old add_custom_image_header call), and that all constants are defined (so as to be backwards compatible).

get_theme_support(): Introduce new second argument, which headers and backgrounds leverage to return an argument. current_theme_supports() already supported checking the truthiness of the argument.

  • For example, get_theme_support( 'custom-header', 'width' ) will return the width specified during registration.
  • If you had wanted the default image, use get_theme_support( 'custom-header', 'default-image' ) instead of HEADER_IMAGE.

Deprecate remove_custom_image_header(), remove_custom_background(). Use remove_theme_support('custom-header'), 'custom-background'.

Deprecate short-lived custom-header-uploads internal support; this is now (bool) 'uploads' for add_theme_support().

New 3.4 functions renamed or removed: Rename get_current_header_data() to get_custom_header(). Remove get_header_image_width() and _height() in favor of get_custom_header()->width and height.

File:
1 edited

Legend:

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

    r20211 r20212  
    7272        $this->admin_header_callback = $admin_header_callback;
    7373        $this->admin_image_div_callback = $admin_image_div_callback;
     74
     75        add_action( 'admin_menu', array( $this, 'init' ) );
    7476    }
    7577
     
    141143        $step = $this->step();
    142144
    143         if ( ( 1 == $step || 3 == $step ) && $this->header_text() )
     145        if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) )
    144146            wp_enqueue_script('farbtastic');
    145147        elseif ( 2 == $step )
     
    155157        $step = $this->step();
    156158
    157         if ( ( 1 == $step || 3 == $step ) && $this->header_text() )
     159        if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) )
    158160            wp_enqueue_style('farbtastic');
    159161        elseif ( 2 == $step )
     
    162164
    163165    /**
    164      * Check if header text is allowed
    165      *
    166      * @since 3.0.0
    167      */
    168     function header_text() {
    169         if ( defined( 'NO_HEADER_TEXT' ) && NO_HEADER_TEXT )
    170             return false;
    171 
    172         return true;
    173     }
    174 
    175     /**
    176166     * Execute custom header modification.
    177167     *
     
    190180            check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
    191181            $this->process_default_headers();
    192             $default = defined( 'HEADER_IMAGE' ) ? HEADER_IMAGE : '';
     182            $default = get_theme_support( 'custom-header', 'default-image' );
    193183            $default = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() );
    194184            foreach ( $this->default_headers as $header => $details ) {
     
    200190            set_theme_mod( 'header_image', $default );
    201191            if ( empty( $default_data['width'] ) )
    202                 $default_data['width'] = HEADER_IMAGE_WIDTH;
     192                $default_data['width'] = get_theme_support( 'custom-header', 'width' );
    203193            if ( empty( $default_data['height'] ) )
    204                 $default_data['height'] = HEADER_IMAGE_HEIGHT;
     194                $default_data['height'] = get_theme_support( 'custom-header', 'height' );
    205195            set_theme_mod( 'header_image_data', (object) $default_data );
    206196            return;
     
    246236                    set_theme_mod( 'header_image', esc_url( $this->default_headers[$_POST['default-header']]['url'] ) );
    247237                    if ( empty( $this->default_headers[$_POST['default-header']]['width'] ) )
    248                         $this->default_headers[$_POST['default-header']]['width'] = HEADER_IMAGE_WIDTH;
     238                        $this->default_headers[$_POST['default-header']]['width'] = get_theme_support( 'custom-header', 'width' );
    249239                    if ( empty( $this->default_headers[$_POST['default-header']]['height'] ) )
    250                         $this->default_headers[$_POST['default-header']]['height'] = HEADER_IMAGE_HEIGHT;
     240                        $this->default_headers[$_POST['default-header']]['height'] = get_theme_support( 'custom-header', 'height' );
    251241                    set_theme_mod( 'header_image_data', (object) $this->default_headers[$_POST['default-header']] );
    252242                }
     
    326316    function js() {
    327317        $step = $this->step();
    328         if ( ( 1 == $step || 3 == $step ) && $this->header_text() )
     318        if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) )
    329319            $this->js_1();
    330320        elseif ( 2 == $step )
     
    342332    var text_objects = ['#name', '#desc', '#text-color-row'];
    343333    var farbtastic;
    344     var default_color = '#<?php echo HEADER_TEXTCOLOR; ?>';
     334    var default_color = '#<?php echo get_theme_support( 'custom-header', 'default-text-color' ); ?>';
    345335    var old_color = null;
    346336
     
    412402
    413403        farbtastic = jQuery.farbtastic('#color-picker', function(color) { pickColor(color); });
    414         <?php if ( $color = get_theme_mod('header_textcolor', HEADER_TEXTCOLOR) ) { ?>
     404        <?php if ( $color = get_header_textcolor() ) { ?>
    415405        pickColor('#<?php echo $color; ?>');
    416406        <?php } ?>
    417407
    418         <?php if ( 'blank' == get_theme_mod( 'header_textcolor', HEADER_TEXTCOLOR ) || '' == get_theme_mod('header_textcolor', HEADER_TEXTCOLOR) || ! $this->header_text() ) { ?>
     408        <?php if ( 'blank' == $color || '' == $color || ! current_theme_supports( 'custom-header', 'header-text' ) ) { ?>
    419409        toggle_text();
    420410        <?php } ?>
     
    441431
    442432    jQuery(document).ready(function() {
    443         <?php
    444         $xinit = HEADER_IMAGE_WIDTH;
    445         $yinit = HEADER_IMAGE_HEIGHT;
    446         $header_support = get_theme_support( 'custom-header' );
    447         if ( !empty( $header_support[ 0 ][ 'suggested-width' ] ) )
    448             $xinit = $header_support[ 0 ][ 'suggested-width' ];
    449         if ( !empty( $header_support[ 0 ][ 'suggested-height' ] ) )
    450             $yinit = $header_support[ 0 ][ 'suggested-height' ];
    451         ?>
    452         var xinit = <?php echo absint( $xinit ); ?>;
    453         var yinit = <?php echo absint( $yinit ); ?>;
     433        var xinit = <?php echo absint( get_theme_support( 'custom-header', 'width' ) ); ?>;
     434        var yinit = <?php echo absint( get_theme_support( 'custom-header', 'height' ) ); ?>;
    454435        var ratio = xinit / yinit;
    455436        var ximg = jQuery('img#upload').width();
     
    482463            if ( ! current_theme_supports( 'custom-header', 'flex-height' ) ) {
    483464            ?>
    484             maxHeight: <?php echo HEADER_IMAGE_HEIGHT; ?>,
     465            maxHeight: <?php echo get_theme_support( 'custom-header', 'height' ); ?>,
    485466            <?php
    486467            }
    487468            if ( ! current_theme_supports( 'custom-header', 'flex-width' ) ) {
    488469            ?>
    489             maxWidth: <?php echo HEADER_IMAGE_WIDTH; ?>,
     470            maxWidth: <?php echo get_theme_support( 'custom-header', 'width' ); ?>,
    490471            <?php
    491472            }
     
    532513<tr valign="top">
    533514<th scope="row"><?php _e( 'Preview' ); ?></th>
    534 <td >
     515<td>
    535516    <?php if ( $this->admin_image_div_callback ) {
    536517      call_user_func( $this->admin_image_div_callback );
    537518    } else {
    538519    ?>
    539     <div id="headimg" style="background-image:url(<?php esc_url ( header_image() ) ?>);max-width:<?php echo get_header_image_width(); ?>px;height:<?php echo get_header_image_height(); ?>px;">
     520    <div id="headimg" style="background-image:url(<?php esc_url ( header_image() ) ?>);max-width:<?php echo get_custom_header()->width; ?>px;height:<?php echo get_custom_header()->height; ?>px;">
    540521        <?php
    541         if ( 'blank' == get_theme_mod('header_textcolor', HEADER_TEXTCOLOR) || '' == get_theme_mod('header_textcolor', HEADER_TEXTCOLOR) || ! $this->header_text() )
     522        $color = get_header_textcolor();
     523        if ( 'blank' == $color || '' == $color || ! current_theme_supports( 'custom-header', 'header-text' ) )
    542524            $style = ' style="display:none;"';
    543525        else
    544             $style = ' style="color:#' . get_theme_mod( 'header_textcolor', HEADER_TEXTCOLOR ) . ';"';
     526            $style = ' style="color:#' . $color . ';"';
    545527        ?>
    546528        <h1><a id="name"<?php echo $style; ?> onclick="return false;" href="<?php bloginfo('url'); ?>"><?php bloginfo( 'name' ); ?></a></h1>
     
    550532</td>
    551533</tr>
    552 <?php if ( current_theme_supports( 'custom-header-uploads' ) ) : ?>
     534<?php if ( current_theme_supports( 'custom-header', 'uploads' ) ) : ?>
    553535<tr valign="top">
    554536<th scope="row"><?php _e( 'Upload Image' ); ?></th>
     
    557539    <?php
    558540    if ( ! current_theme_supports( 'custom-header', 'flex-height' ) && ! current_theme_supports( 'custom-header', 'flex-width' ) ) {
    559         printf( __( 'Images of exactly <strong>%1$d &times; %2$d pixels</strong> will be used as-is.' ) . '<br />', HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT );
     541        printf( __( 'Images of exactly <strong>%1$d &times; %2$d pixels</strong> will be used as-is.' ) . '<br />', get_theme_support( 'custom-header', 'width' ), get_theme_support( 'custom-header', 'height' ) );
    560542    } elseif ( current_theme_supports( 'custom-header', 'flex-height' ) ) {
    561543        if ( ! current_theme_supports( 'custom-header', 'flex-width' ) )
    562             printf( __( 'Images should be at least <strong>%1$d pixels</strong> wide.' ) . '<br />', HEADER_IMAGE_WIDTH );
     544            printf( __( 'Images should be at least <strong>%1$d pixels</strong> wide.' ) . ' ', get_theme_support( 'custom-header', 'width' ) );
    563545    } elseif ( current_theme_supports( 'custom-header', 'flex-width' ) ) {
    564546        if ( ! current_theme_supports( 'custom-header', 'flex-height' ) )
    565             printf( __( 'Images should be at least <strong>%1$d pixels</strong> tall.' ) . '<br />', HEADER_IMAGE_HEIGHT );
     547            printf( __( 'Images should be at least <strong>%1$d pixels</strong> tall.' ) . ' ', get_theme_support( 'custom-header', 'height' ) );
    566548    }
    567549    if ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) {
    568         $header_support = get_theme_support( 'custom-header' );
    569         if ( !empty( $header_support[ 0 ][ 'suggested-width' ] ) )
    570             printf( __( 'Suggested width is <strong>%1$d pixels</strong>.' ) . '<br />', absint( $header_support[ 0 ][ 'suggested-width' ] ) );
    571         if ( !empty( $header_support[ 0 ][ 'suggested-height' ] ) )
    572             printf( __( 'Suggested height is <strong>%1$d pixels</strong>.' ) . '<br />', absint( $header_support[ 0 ][ 'suggested-height' ] ) );
     550        if ( current_theme_supports( 'custom-header', 'width' ) )
     551            printf( __( 'Suggested width is <strong>%1$d pixels</strong>.' ) . ' ', get_theme_support( 'custom-header', 'width' ) );
     552        if ( current_theme_supports( 'custom-header', 'height' ) )
     553            printf( __( 'Suggested height is <strong>%1$d pixels</strong>.' ) . ' ', get_theme_support( 'custom-header', 'height' ) );
    573554    }
    574555    ?></p>
     
    606587<th scope="row"><?php _e( 'Default Images' ); ?></th>
    607588<td>
    608 <?php if ( current_theme_supports( 'custom-header-uploads' ) ) : ?>
     589<?php if ( current_theme_supports( 'custom-header', 'uploads' ) ) : ?>
    609590    <p><?php _e( 'If you don&lsquo;t want to upload your own image, you can use one of these cool headers, or show a random one.' ) ?></p>
    610591<?php else: ?>
     
    627608    <?php endif;
    628609
    629     if ( defined( 'HEADER_IMAGE' ) && '' != HEADER_IMAGE ) : ?>
     610    if ( current_theme_supports( 'custom-header', 'default-image' ) ) : ?>
    630611<tr valign="top">
    631612<th scope="row"><?php _e( 'Reset Image' ); ?></th>
     
    638619</tbody>
    639620</table>
    640     <?php if ( $this->header_text() ) : ?>
     621    <?php if ( current_theme_supports( 'custom-header', 'header-text' ) ) : ?>
    641622<table class="form-table">
    642623<tbody>
     
    645626<td>
    646627    <p>
    647     <?php $hidetext = get_theme_mod( 'header_textcolor', HEADER_TEXTCOLOR ); ?>
    648     <label><input type="radio" value="1" name="hidetext" id="hidetext"<?php checked( ( 'blank' == $hidetext || empty( $hidetext ) )  ? true : false ); ?> /> <?php _e( 'No' ); ?></label>
    649     <label><input type="radio" value="0" name="hidetext" id="showtext"<?php checked( ( 'blank' == $hidetext || empty( $hidetext ) ) ? false : true ); ?> /> <?php _e( 'Yes' ); ?></label>
     628    <?php
     629        $show_text = get_header_textcolor();
     630        if ( 'blank' == $show_text )
     631            $show_text = false;
     632        else
     633            $show_text = (bool) $show_text;
     634    ?>
     635    <label><input type="radio" value="1" name="hidetext" id="hidetext"<?php checked( ! $show_text ); ?> /> <?php _e( 'No' ); ?></label>
     636    <label><input type="radio" value="0" name="hidetext" id="showtext"<?php checked( $show_text ); ?> /> <?php _e( 'Yes' ); ?></label>
    650637    </p>
    651638</td>
     
    656643<td>
    657644    <p>
    658         <input type="text" name="text-color" id="text-color" value="#<?php echo esc_attr( get_theme_mod( 'header_textcolor', HEADER_TEXTCOLOR ) ); ?>" />
     645        <input type="text" name="text-color" id="text-color" value="#<?php echo esc_attr( get_header_textcolor() ); ?>" />
    659646        <span class="description hide-if-js"><?php _e( 'If you want to hide header text, add <strong>#blank</strong> as text color.' );?></span>
    660647        <input type="button" class="button hide-if-no-js" value="<?php esc_attr_e( 'Select a Color' ); ?>" id="pickcolor" />
     
    664651</tr>
    665652
    666     <?php if ( defined('HEADER_TEXTCOLOR') && get_theme_mod('header_textcolor') ) { ?>
     653    <?php if ( current_theme_supports( 'custom-header', 'default-text-color' ) && get_theme_mod( 'header_textcolor' ) ) { ?>
    667654<tr valign="top">
    668655<th scope="row"><?php _e('Reset Text Color'); ?></th>
     
    695682    function step_2() {
    696683        check_admin_referer('custom-header-upload', '_wpnonce-custom-header-upload');
    697         if ( ! current_theme_supports( 'custom-header-uploads' ) )
     684        if ( ! current_theme_supports( 'custom-header', 'uploads' ) )
    698685            wp_die( __( 'Cheatin&#8217; uh?' ) );
    699686
     
    723710        list($width, $height, $type, $attr) = getimagesize( $file );
    724711
    725         $header_support = get_theme_support( 'custom-header' );
    726712        $max_width = 0;
    727713        // For flex, limit size of image displayed to 1500px unless theme says otherwise
     
    729715            $max_width = 1500;
    730716
    731         if ( !empty( $header_support[ 0 ][ 'max-width' ] ) )
    732             $max_width = max( $max_width, absint( $header_support[ 0 ][ 'max-width' ] ) );
    733 
    734         if ( defined( 'HEADER_IMAGE_WIDTH' ) )
    735             $max_width = max( $max_width, HEADER_IMAGE_WIDTH );
     717        if ( current_theme_supports( 'custom-header', 'max-width' ) )
     718            $max_width = max( $max_width, get_theme_support( 'custom-header', 'max-width' ) );
     719        $max_width = max( $max_width, get_theme_support( 'custom-header', 'width' ) );
     720
    736721        // If flexible height isn't supported and the image is the exact right size
    737         if ( ! current_theme_supports( 'custom-header', 'flex-height' ) && ! current_theme_supports( 'custom-header', 'flex-width' ) && $width == HEADER_IMAGE_WIDTH && $height == HEADER_IMAGE_HEIGHT ) {
     722        if ( ! current_theme_supports( 'custom-header', 'flex-height' ) && ! current_theme_supports( 'custom-header', 'flex-width' )
     723            && $width == get_theme_support( 'custom-header', 'width' ) && $height == get_theme_support( 'custom-header', 'height' ) )
     724        {
    738725            // Add the meta-data
    739726            wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) );
     
    792779     */
    793780    function step_3() {
    794         check_admin_referer('custom-header-crop-image');
    795         if ( ! current_theme_supports( 'custom-header-uploads' ) )
     781        check_admin_referer( 'custom-header-crop-image' );
     782
     783        if ( ! current_theme_supports( 'custom-header', 'uploads' ) )
    796784            wp_die( __( 'Cheatin&#8217; uh?' ) );
    797785
     
    806794        $original = get_attached_file($attachment_id);
    807795
    808         $header_support = get_theme_support( 'custom-header' );
     796
    809797        $max_width = 0;
    810798        // For flex, limit size of image displayed to 1500px unless theme says otherwise
     
    812800            $max_width = 1500;
    813801
    814         if ( !empty( $header_support[ 0 ][ 'max-width' ] ) )
    815             $max_width = max( $max_width, absint( $header_support[ 0 ][ 'max-width' ] ) );
    816 
    817         if ( defined( 'HEADER_IMAGE_WIDTH' ) )
    818             $max_width = max( $max_width, HEADER_IMAGE_WIDTH );
     802        if ( current_theme_supports( 'custom-header', 'max-width' ) )
     803            $max_width = max( $max_width, get_theme_support( 'custom-header', 'max-width' ) );
     804        $max_width = max( $max_width, get_theme_support( 'custom-header', 'width' ) );
    819805
    820806        if ( ( current_theme_supports( 'custom-header', 'flex-height' ) && ! current_theme_supports( 'custom-header', 'flex-width' ) ) || $_POST['width'] > $max_width )
     
    823809            $dst_height = absint( $_POST['height'] );
    824810        else
    825             $dst_height = HEADER_IMAGE_HEIGHT;
     811            $dst_height = get_theme_support( 'custom-header', 'height' );
    826812
    827813        if ( ( current_theme_supports( 'custom-header', 'flex-width' ) && ! current_theme_supports( 'custom-header', 'flex-height' ) ) || $_POST['width'] > $max_width )
     
    830816            $dst_width = absint( $_POST['width'] );
    831817        else
    832             $dst_width = HEADER_IMAGE_WIDTH;
     818            $dst_width = get_theme_support( 'custom-header', 'width' );
    833819
    834820        $cropped = wp_crop_image( $attachment_id, (int) $_POST['x1'], (int) $_POST['y1'], (int) $_POST['width'], (int) $_POST['height'], $dst_width, $dst_height );
Note: See TracChangeset for help on using the changeset viewer.