Make WordPress Core


Ignore:
Timestamp:
03/19/2012 05:12:44 PM (14 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.