Make WordPress Core

Ticket #21391: 21391.5.diff

File 21391.5.diff, 30.4 KB (added by ocean90, 12 years ago)
  • wp-includes/taxonomy.php

     
    6161                '_builtin' => true,
    6262        ) );
    6363
     64        register_taxonomy( 'attachment_category', 'attachment', array(
     65                'hierarchical' => true,
     66                'query_var' => false,
     67                'rewrite' => false,
     68                'public' => false,
     69                'show_ui' => true,
     70                '_builtin' => true,
     71                'show_admin_column' => true,
     72        ) );
     73
     74        register_taxonomy( 'attachment_tag', 'attachment', array(
     75                'hierarchical' => false,
     76                'query_var' => false,
     77                'rewrite' => false,
     78                'public' => false,
     79                'show_ui' => true,
     80                '_builtin' => true,
     81                'show_admin_column' => true,
     82        ) );
     83
    6484        register_taxonomy( 'nav_menu', 'nav_menu_item', array(
    6585                'public' => false,
    6686                'hierarchical' => false,
  • wp-includes/link-template.php

     
    106106        if ( $post->post_type == 'page' )
    107107                return get_page_link($post->ID, $leavename, $sample);
    108108        elseif ( $post->post_type == 'attachment' )
    109                 return get_attachment_link($post->ID);
     109                return get_attachment_link( $post->ID, $leavename );
    110110        elseif ( in_array($post->post_type, get_post_types( array('_builtin' => false) ) ) )
    111111                return get_post_permalink($post->ID, $leavename, $sample);
    112112
     
    292292 * @since 2.0.0
    293293 *
    294294 * @param mixed $post Optional. Post ID or object.
     295 * @param bool $leavename Optional. Leave name.
    295296 * @return string
    296297 */
    297 function get_attachment_link( $post = null ) {
     298function get_attachment_link( $post = null, $leavename = false ) {
    298299        global $wp_rewrite;
    299300
    300301        $link = false;
     
    314315                        $name = $post->post_name;
    315316
    316317                if ( strpos($parentlink, '?') === false )
    317                         $link = user_trailingslashit( trailingslashit($parentlink) . $name );
     318                        $link = user_trailingslashit( trailingslashit($parentlink) . '%postname%' );
     319
     320                if ( ! $leavename )
     321                        $link = str_replace( '%postname%', $name, $link );
    318322        }
    319323
    320324        if ( ! $link )
  • wp-includes/post.php

     
    5353        register_post_type( 'attachment', array(
    5454                'labels' => array(
    5555                        'name' => __( 'Media' ),
    56                         'edit_item' => __( 'Edit Media' ),
     56                        'name' => _x('Media', 'post type general name'),
     57                        'singular_name' => _x( 'Media Item', 'post type singular name' ),
     58                        'add_new' => _x( 'Add New', 'media item'),
     59                        'add_new_item' => __( 'Add New Media' ),
     60                        'edit_item' => __( 'Edit Media' ),
     61                        'new_item' => __( 'New Media Item' ),
     62                        'view_item' => __( 'View Attachment Page' ),
     63                        'search_items' => __( 'Search Media' ),
     64                        'not_found' => __( 'No media found.' ),
     65                        'not_found_in_trash' => __('No media found in Trash.'),
     66                        'parent_item_colon' => __('Parent:'),
     67                        'all_items' => __( 'All Media' ),
    5768                ),
    5869                'public' => true,
    59                 'show_ui' => false,
     70                'show_ui' => true,
    6071                '_builtin' => true, /* internal use only. don't use this when registering your own post type. */
    61                 '_edit_link' => 'media.php?attachment_id=%d', /* internal use only. don't use this when registering your own post type. */
     72                '_edit_link' => 'post.php?post=%d', /* internal use only. don't use this when registering your own post type. */
    6273                'capability_type' => 'post',
    6374                'map_meta_cap' => true,
    6475                'hierarchical' => false,
     
    6677                'query_var' => false,
    6778                'show_in_nav_menus' => false,
    6879                'delete_with_user' => true,
    69                 'supports' => array( 'comments', 'author' ),
     80                'supports' => array( 'title', 'editor', 'author', 'comments', 'image_editor' ),
     81                'disables' => array( 'save', 'preview', 'post_status', 'visibility' )
    7082        ) );
    7183
    7284        register_post_type( 'revision', array(
     
    11531165                add_post_type_support($post_type, array('title', 'editor'));
    11541166        }
    11551167
     1168        if ( ! empty( $args->disables ) ) {
     1169                disable_for_post_type( $post_type, $args->disables );
     1170                unset( $args->disables );
     1171        }
     1172
    11561173        if ( false !== $args->query_var && !empty($wp) ) {
    11571174                if ( true === $args->query_var )
    11581175                        $args->query_var = $post_type;
     
    15081525
    15091526        return true;
    15101527}
     1528/**
     1529 * Disable long-existing features for a post type
     1530 *
     1531 * Can't later add post type support for certain things
     1532 *
     1533 * @since 3.5.0
     1534 * @param string $post_type The post type for which to remove the feature
     1535 * @param string|array $feature the feature being removed, can be an array of feature strings or a single string
     1536 */
     1537function disable_for_post_type( $post_type, $feature ) {
     1538        global $_wp_post_type_disabled;
    15111539
     1540        $features = (array) $feature;
     1541        foreach ($features as $feature) {
     1542                if ( func_num_args() == 2 )
     1543                        $_wp_post_type_disabled[$post_type][$feature] = true;
     1544                else
     1545                        $_wp_post_type_disabled[$post_type][$feature] = array_slice( func_get_args(), 2 );
     1546        }
     1547}
     1548
    15121549/**
     1550 * Get all the disabled post type features
     1551 *
     1552 * @since 3.5.0
     1553 * @param string $post_type The post type
     1554 * @return array
     1555 */
     1556
     1557function get_all_disabled_for_post_type( $post_type ) {
     1558        global $_wp_post_type_disabled;
     1559
     1560        if ( isset( $_wp_post_type_disabled[$post_type] ) )
     1561                return $_wp_post_type_disabled[$post_type];
     1562
     1563        return array();
     1564}
     1565
     1566/**
     1567 * Checks whether a post type disables a given feature
     1568 *
     1569 * @since 3.5.0
     1570 * @param string $post_type The post type being checked
     1571 * @param string $feature the feature being checked
     1572 * @return boolean
     1573 */
     1574
     1575function post_type_disables( $post_type, $feature ) {
     1576        global $_wp_post_type_disabled;
     1577
     1578        if ( !isset( $_wp_post_type_disabled[$post_type][$feature] ) )
     1579                return false;
     1580
     1581        // If no args passed then no extra checks need be performed
     1582        if ( func_num_args() <= 2 )
     1583                return true;
     1584
     1585        return true;
     1586}
     1587
     1588/**
    15131589 * Updates the post type for the post ID.
    15141590 *
    15151591 * The page or post cache will be cleaned for the post ID.
     
    37823858        if ( ! in_array( $post_status, array( 'inherit', 'private' ) ) )
    37833859                $post_status = 'inherit';
    37843860
    3785         // Make sure we set a valid category.
    3786         if ( !isset($post_category) || 0 == count($post_category) || !is_array($post_category) ) {
    3787                 // 'post' requires at least one category.
    3788                 if ( 'post' == $post_type )
    3789                         $post_category = array( get_option('default_category') );
    3790                 else
    3791                         $post_category = array();
     3861
     3862        // Support for all (custom) taxonomies
     3863        if ( !empty($tax_input) ) {
     3864                foreach ( $tax_input as $taxonomy => $tags ) {
     3865                        $taxonomy_obj = get_taxonomy($taxonomy);
     3866                        if ( is_array($tags) ) // array = hierarchical, string = non-hierarchical.
     3867                                $tags = array_filter($tags);
     3868                        if ( current_user_can($taxonomy_obj->cap->assign_terms) )
     3869                                wp_set_post_terms( $post_ID, $tags, $taxonomy );
     3870                }
    37923871        }
    37933872
    37943873        // Are we updating or creating?
     
    38733952                $wpdb->update( $wpdb->posts, compact("post_name"), array( 'ID' => $post_ID ) );
    38743953        }
    38753954
    3876         wp_set_post_categories($post_ID, $post_category);
    3877 
    38783955        if ( $file )
    38793956                update_attached_file( $post_ID, $file );
    38803957
  • wp-admin/includes/class-wp-terms-list-table.php

     
    103103
    104104                if ( 'link_category' == $this->screen->taxonomy ) {
    105105                        $columns['links'] = __( 'Links' );
     106                } else if ( 'attachment_category' == $this->screen->taxonomy || 'attachment_tag' == $this->screen->taxonomy  ) {
     107                        $columns['attachments'] = __( 'Attachments' );
    106108                } else {
    107109                        $post_type_object = get_post_type_object( $this->screen->post_type );
    108110                        $columns['posts'] = $post_type_object ? $post_type_object->labels->name : __( 'Posts' );
     
    117119                        'description' => 'description',
    118120                        'slug'        => 'slug',
    119121                        'posts'       => 'count',
    120                         'links'       => 'count'
     122                        'links'       => 'count',
     123                        'attachments' => 'count'
    121124                );
    122125        }
    123126
     
    302305                return "<a href='" . esc_url ( add_query_arg( $args, 'edit.php' ) ) . "'>$count</a>";
    303306        }
    304307
     308        function column_attachments( $tag ) {
     309                $count = number_format_i18n( $tag->count );
     310
     311                $tax = get_taxonomy( $this->screen->taxonomy );
     312
     313                $ptype_object = get_post_type_object( $this->screen->post_type );
     314                if ( ! $ptype_object->show_ui )
     315                        return $count;
     316
     317                if ( $tax->query_var ) {
     318                        $args = array( $tax->query_var => $tag->slug );
     319                } else {
     320                        $args = array( 'taxonomy' => $tax->name, 'term' => $tag->slug );
     321                }
     322
     323                return "<a href='" . esc_url ( add_query_arg( $args, 'upload.php' ) ) . "'>$count</a>";
     324        }
     325
    305326        function column_links( $tag ) {
    306327                $count = number_format_i18n( $tag->count );
    307328                if ( $count )
  • wp-admin/includes/post.php

     
    235235                }
    236236        }
    237237
     238        // Attachment stuff
     239        if ( isset( $post_data['_wp_attachment_image_alt'] ) ) {
     240                $image_alt = get_post_meta( $post_ID, '_wp_attachment_image_alt', true );
     241                if ( $image_alt != stripslashes( $post_data['_wp_attachment_image_alt'] ) ) {
     242                        $image_alt = wp_strip_all_tags( stripslashes( $post_data['_wp_attachment_image_alt'] ), true );
     243                        // update_meta expects slashed
     244                        update_post_meta( $post_ID, '_wp_attachment_image_alt', addslashes( $image_alt ) );
     245                }
     246        }
     247
    238248        add_meta( $post_ID );
    239249
    240250        update_post_meta( $post_ID, '_edit_last', $GLOBALS['current_user']->ID );
     
    10641074
    10651075        list($permalink, $post_name) = get_sample_permalink($post->ID, $new_title, $new_slug);
    10661076
    1067         if ( 'publish' == $post->post_status ) {
     1077        if ( 'publish' == get_post_status( $post ) ) {
    10681078                $ptype = get_post_type_object($post->post_type);
    10691079                $view_post = $ptype->labels->view_item;
    10701080                $title = __('Click to edit this part of the permalink');
  • wp-admin/includes/screen.php

     
    9898                if ( 'post' == $screen->base ) {
    9999                        if ( 'post' == $screen->post_type || 'page' == $screen->post_type )
    100100                                $hidden = array('slugdiv', 'trackbacksdiv', 'postcustom', 'postexcerpt', 'commentstatusdiv', 'commentsdiv', 'authordiv', 'revisionsdiv');
     101                        elseif ( 'attachment' == $screen->post_type )
     102                                $hidden = array( 'slugdiv', 'trackbacksdiv', 'postcustom', 'authordiv', 'revisionsdiv' );
    101103                        else
    102104                                $hidden = array( 'slugdiv' );
    103105                }
  • wp-admin/includes/media.php

     
    857857
    858858/**
    859859 * Filters input from media_upload_form_handler() and assigns a default
    860  * post_title from the file name if none supplied. 
     860 * post_title from the file name if none supplied.
    861861 *
    862  * Illustrates the use of the attachment_fields_to_save filter 
     862 * Illustrates the use of the attachment_fields_to_save filter
    863863 * which can be used to add default values to any field before saving to DB.
    864864 *
    865865 * @since 2.5.0
     
    20952095        echo '<p>' . sprintf( __( 'Sorry, you have used all of your storage quota of %s MB.' ), get_space_allowed() ) . '</p>';
    20962096}
    20972097
     2098/**
     2099 * Displays the image and editor in the post editor
     2100 *
     2101 * @since 3.5.0
     2102 */
     2103function edit_form_image_editor() {
     2104        $post = get_post();
     2105
     2106        if ( ( $attachment_id = intval( $post->ID ) ) && $thumb_url = wp_get_attachment_image_src( $attachment_id, 'thumbnail', true ) )
     2107                $thumb_url = $thumb_url[0];
     2108        else
     2109                $thumb_url = false;
     2110
     2111        $filename = esc_html( basename( $post->guid ) );
     2112        $title = esc_attr( $post->post_title );
     2113
     2114
     2115        $post_mime_types = get_post_mime_types();
     2116        $keys = array_keys( wp_match_mime_types( array_keys( $post_mime_types ), $post->post_mime_type ) );
     2117        $type = array_shift( $keys );
     2118        $type_html = "<input type='hidden' id='type-of-$attachment_id' value='" . esc_attr( $type ) . "' />";
     2119
     2120
     2121        $media_dims = '';
     2122        $meta = wp_get_attachment_metadata( $post->ID );
     2123        if ( is_array( $meta ) && array_key_exists( 'width', $meta ) && array_key_exists( 'height', $meta ) )
     2124                $media_dims .= "<span id='media-dims-$post->ID'>{$meta['width']}&nbsp;&times;&nbsp;{$meta['height']}</span> ";
     2125        $media_dims = apply_filters( 'media_meta', $media_dims, $post );
     2126
     2127        $image_edit_button = '';
     2128        if ( gd_edit_image_support( $post->post_mime_type ) ) {
     2129                $nonce = wp_create_nonce( "image_editor-$post->ID" );
     2130                $image_edit_button = "<input type='button' id='imgedit-open-btn-$post->ID' onclick='imageEdit.open( $post->ID, \"$nonce\" )' class='button' value='" . esc_attr__( 'Edit Image' ) . "' /> <img src='" . esc_url( admin_url( 'images/wpspin_light.gif' ) ) . "' class='imgedit-wait-spin' alt='' />";
     2131        }
     2132
     2133        ?>
     2134        <div class="wp_attachment_holder">
     2135                <div class="imgedit-response" id="imgedit-response-<?php echo $attachment_id; ?>"></div>
     2136
     2137                <div class="wp_attachment_image" id="media-head-<?php echo $attachment_id; ?>">
     2138                        <p><img class="thumbnail" src="<?php echo $thumb_url; ?>" alt="" /></p>
     2139                        <p><?php echo $image_edit_button; ?></p>
     2140                </div>
     2141                <div style="display:none" class="image-editor" id="image-editor-<?php echo $attachment_id; ?>"></div>
     2142
     2143                <div class="wp_attachment_details">
     2144                        <p><strong><?php _e( 'File name:' ); ?></strong> <?php echo $filename; ?></p>
     2145                        <p><strong><?php _e( 'File type:' ); ?></strong> <?php echo $post->post_mime_type; ?></p>
     2146                        <?php
     2147                                if ( !empty( $media_dims ) )
     2148                                        echo '<p><strong>' . __( 'Dimensions:' ) . "</strong> $media_dims</p>";
     2149                        ?>
     2150                </div>
     2151        </div>
     2152        <?php
     2153}
     2154
    20982155add_filter( 'async_upload_image', 'get_media_item', 10, 2 );
    20992156add_filter( 'async_upload_audio', 'get_media_item', 10, 2 );
    21002157add_filter( 'async_upload_video', 'get_media_item', 10, 2 );
  • wp-admin/includes/class-wp-media-list-table.php

     
    132132                /* translators: column name */
    133133                $posts_columns['title'] = _x( 'File', 'column name' );
    134134                $posts_columns['author'] = __( 'Author' );
    135                 //$posts_columns['tags'] = _x( 'Tags', 'column name' );
     135
     136                $taxonomies = array();
     137
     138                $taxonomies = get_object_taxonomies( 'attachment', 'objects' );
     139                $taxonomies = wp_filter_object_list( $taxonomies, array( 'show_admin_column' => true ), 'and', 'name' );
     140
     141                $taxonomies = apply_filters( "manage_taxonomies_for_attachment_columns", $taxonomies, 'attachment' );
     142                $taxonomies = array_filter( $taxonomies, 'taxonomy_exists' );
     143
     144                foreach ( $taxonomies as $taxonomy ) {
     145                        if ( 'category' == $taxonomy )
     146                                $column_key = 'categories';
     147                        elseif ( 'post_tag' == $taxonomy )
     148                                $column_key = 'tags';
     149                        else
     150                                $column_key = 'taxonomy-' . $taxonomy;
     151
     152                        $posts_columns[ $column_key ] = get_taxonomy( $taxonomy )->labels->name;
     153                }
     154
    136155                /* translators: column name */
    137156                if ( !$this->detached ) {
    138157                        $posts_columns['parent'] = _x( 'Attached to', 'column name' );
     
    251270<?php
    252271                break;
    253272
    254         case 'tags':
    255 ?>
    256                 <td <?php echo $attributes ?>><?php
    257                 $tags = get_the_tags();
    258                 if ( !empty( $tags ) ) {
    259                         $out = array();
    260                         foreach ( $tags as $c )
    261                                 $out[] = "<a href='edit.php?tag=$c->slug'> " . esc_html( sanitize_term_field( 'name', $c->name, $c->term_id, 'post_tag', 'display' ) ) . "</a>";
    262                         echo join( ', ', $out );
    263                 } else {
    264                         _e( 'No Tags' );
    265                 }
    266 ?>
    267                 </td>
    268 <?php
    269                 break;
    270 
    271273        case 'desc':
    272274?>
    273275                <td <?php echo $attributes ?>><?php echo has_excerpt() ? $post->post_excerpt : ''; ?></td>
     
    339341                break;
    340342
    341343        default:
     344                if ( 'categories' == $column_name )
     345                        $taxonomy = 'category';
     346                elseif ( 'tags' == $column_name )
     347                        $taxonomy = 'post_tag';
     348                elseif ( 0 === strpos( $column_name, 'taxonomy-' ) )
     349                        $taxonomy = substr( $column_name, 9 );
     350
     351                if ( ! empty( $taxonomy ) ) {
     352                        $taxonomy_object = get_taxonomy( $taxonomy );
     353                        echo '<td ' . $attributes . '>';
     354                        if ( $terms = get_the_terms( $post->ID, $taxonomy ) ) {
     355                                $out = array();
     356                                foreach ( $terms as $t ) {
     357                                        $posts_in_term_qv = array();
     358                                        $posts_in_term_qv['taxonomy'] = $taxonomy;
     359                                        $posts_in_term_qv['term'] = $t->slug;
     360
     361                                        $out[] = sprintf( '<a href="%s">%s</a>',
     362                                                esc_url( add_query_arg( $posts_in_term_qv, 'upload.php' ) ),
     363                                                esc_html( sanitize_term_field( 'name', $t->name, $t->term_id, $taxonomy, 'display' ) )
     364                                        );
     365                                }
     366                                /* translators: used between list items, there is a space after the comma */
     367                                echo join( __( ', ' ), $out );
     368                        } else {
     369                                echo '&#8212;';
     370                        }
     371                        echo '</td>';
     372                        break;
     373                }
    342374?>
    343375                <td <?php echo $attributes ?>>
    344376                        <?php do_action( 'manage_media_custom_column', $column_name, $id ); ?>
  • wp-admin/includes/meta-boxes.php

     
    2626</div>
    2727
    2828<div id="minor-publishing-actions">
     29<?php if ( ! post_type_disables( $post->post_type, 'save' ) ) : ?>
    2930<div id="save-action">
    3031<?php if ( 'publish' != $post->post_status && 'future' != $post->post_status && 'pending' != $post->post_status ) { ?>
    3132<input <?php if ( 'private' == $post->post_status ) { ?>style="display:none"<?php } ?> type="submit" name="save" id="save-post" value="<?php esc_attr_e('Save Draft'); ?>" class="button" />
     
    3435<?php } ?>
    3536<img src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" class="ajax-loading" id="draft-ajax-loading" alt="" />
    3637</div>
    37 <?php if ( $post_type_object->public ) : ?>
     38<?php
     39endif; // doesn't disable save button
     40
     41if ( ! post_type_disables( $post->post_type, 'preview' ) && $post_type_object->public ) :
     42?>
    3843<div id="preview-action">
    3944<?php
    4045if ( 'publish' == $post->post_status ) {
     
    5560
    5661<div id="misc-publishing-actions">
    5762
     63<?php if ( ! post_type_disables( $post->post_type, 'post_status' ) ) : ?>
    5864<div class="misc-pub-section"><label for="post_status"><?php _e('Status:') ?></label>
     65
    5966<span id="post-status-display">
    6067<?php
    6168switch ( $post->post_status ) {
     
    103110</div>
    104111
    105112<?php } ?>
    106 </div><?php // /misc-pub-section ?>
     113</div><!-- /misc-pub-section -->
    107114
     115<?php endif; // doesn't disable post_status ?>
     116
     117<?php if ( ! post_type_disables( $post->post_type, 'visibility' ) ) : ?>
    108118<div class="misc-pub-section" id="visibility">
    109119<?php _e('Visibility:'); ?> <span id="post-visibility-display"><?php
    110120
     
    148158</div>
    149159<?php } ?>
    150160
    151 </div><?php // /misc-pub-section ?>
     161</div><!-- /misc-pub-section -->
    152162
     163<?php endif; // doesn't disable visibility ?>
     164
    153165<?php
    154166// translators: Publish box date format, see http://php.net/date
    155167$datef = __( 'M j, Y @ G:i' );
    156168if ( 0 != $post->ID ) {
    157         if ( 'future' == $post->post_status ) { // scheduled for publishing at a future date
     169        if ( 'attachment' == get_post_type() ) { // attachments are uploaded on a date
     170                $stamp = __('Uploaded on: <b>%1$s</b>');
     171        } else if ( 'future' == get_post_status() ) { // scheduled for publishing at a future date
    158172                $stamp = __('Scheduled for: <b>%1$s</b>');
    159         } else if ( 'publish' == $post->post_status || 'private' == $post->post_status ) { // already published
     173        } else if ( 'publish' == get_post_status() || 'private' == get_post_status() ) { // already published
    160174                $stamp = __('Published on: <b>%1$s</b>');
    161175        } else if ( '0000-00-00 00:00:00' == $post->post_date_gmt ) { // draft, 1 or more saves, no date specified
    162176                $stamp = __('Publish <b>immediately</b>');
     
    171185        $date = date_i18n( $datef, strtotime( current_time('mysql') ) );
    172186}
    173187
    174 if ( $can_publish ) : // Contributors don't get to choose the date of publish ?>
     188if ( $can_publish && ! post_type_disables( $post->post_type, 'change_publish_date' ) ) : // Contributors don't get to choose the date of publish ?>
    175189<div class="misc-pub-section curtime">
    176190        <span id="timestamp">
    177191        <?php printf($stamp, $date); ?></span>
     
    202216<div id="publishing-action">
    203217<img src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" class="ajax-loading" id="ajax-loading" alt="" />
    204218<?php
    205 if ( !in_array( $post->post_status, array('publish', 'future', 'private') ) || 0 == $post->ID ) {
     219if ( !in_array( $post->post_status, array('publish', 'future', 'private','inherit') ) || 0 == $post->ID ) {
    206220        if ( $can_publish ) :
    207221                if ( !empty($post->post_date_gmt) && time() < strtotime( $post->post_date_gmt . ' +0000' ) ) : ?>
    208222                <input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e('Schedule') ?>" />
     
    982996                <a href="#" class="remove"><?php _e( 'Remove Featured Image' ); ?></a>
    983997        </div>
    984998        <?php
    985 }
    986  No newline at end of file
     999}
     1000
     1001/**
     1002 * Display attachment/media-specific information
     1003 *
     1004 * @since 3.5.0
     1005 *
     1006 * @param object $post
     1007 */
     1008function attachment_data_meta_box( $post ) {
     1009        $att_url = wp_get_attachment_url( $post->ID );
     1010        $alt_text = get_post_meta( $post->ID, '_wp_attachment_image_alt', true );
     1011?>
     1012        <label for="_wp_attachment_image_alt"><strong>Alternative text</strong></label><br />
     1013        <input type="text" class="widefat" name="_wp_attachment_image_alt" value="<?php echo esc_attr( $alt_text ); ?>" />
     1014</p>
     1015
     1016<p>
     1017        <label for="excerpt"><strong>Excerpt</strong></label><br />
     1018        <textarea class="widefat" name="excerpt"><?php echo $post->post_excerpt; ?></textarea>
     1019</p>
     1020
     1021<p>
     1022        <label for="attachment_url"><strong>File URL</strong></label><br />
     1023        <input type="text" class="widefat urlfield" readonly="readonly" name="attachment_url" value="<?php echo esc_attr($att_url); ?>" /><br />
     1024        <em><?php _e( 'Location of the uploaded file.' ); ?></em>
     1025</p>
     1026<?php
     1027}
  • wp-admin/edit-tags.php

     
    2525
    2626$title = $tax->labels->name;
    2727
    28 if ( 'post' != $post_type ) {
     28if ( 'attachment' == $post_type  ) {
     29        $parent_file = 'upload.php';
     30        $submenu_file = "edit-tags.php?taxonomy=$taxonomy&amp;post_type=$post_type";
     31} else if ( 'post' != $post_type ) {
    2932        $parent_file = "edit.php?post_type=$post_type";
    3033        $submenu_file = "edit-tags.php?taxonomy=$taxonomy&amp;post_type=$post_type";
    3134} else if ( 'link_category' == $tax->name ) {
  • wp-admin/css/wp-admin.css

     
    23122312        width: 10%;
    23132313}
    23142314
     2315.fixed .column-attachments {
     2316        width: 15%;
     2317}
     2318
    23152319.fixed .column-icon {
    23162320        width: 80px;
    23172321}
     
    37503754}
    37513755
    37523756.upload-php .fixed .column-parent {
    3753         width: 25%;
     3757        width: 15%;
    37543758}
    37553759
    37563760.js .html-uploader #plupload-upload-ui {
     
    39293933        margin: 8px 0;
    39303934}
    39313935
    3932 .describe .imgedit-wrap table td {
     3936.describe .imgedit-wrap table td,
     3937.wp_attachment_holder .imgedit-wrap table td {
    39333938        vertical-align: top;
    39343939        padding-top: 0;
    39353940}
  • wp-admin/post.php

     
    148148                $parent_file = "edit.php";
    149149                $submenu_file = "edit.php";
    150150                $post_new_file = "post-new.php";
     151        } elseif ( 'attachment' === $post_type ) {
     152                $parent_file = 'upload.php';
     153                $submenu_file = 'upload.php';
     154                $post_new_file = 'media-new.php';
    151155        } else {
    152156                if ( isset( $post_type_object ) && $post_type_object->show_in_menu && $post_type_object->show_in_menu !== true )
    153157                        $parent_file = $post_type_object->show_in_menu;
  • wp-admin/edit-form-advanced.php

     
    2424        add_action( 'admin_footer', 'wp_print_media_templates' );
    2525}
    2626
     27if ( post_type_supports( $post_type, 'image_editor' ) ) {
     28        wp_enqueue_script( 'image-edit' );
     29        wp_enqueue_style( 'imgareaselect' );
     30}
     31
    2732/**
    2833 * Post ID global
    2934 * @name $post_ID
     
    7782
    7883$notice = false;
    7984$form_extra = '';
    80 if ( 'auto-draft' == $post->post_status ) {
     85if ( 'auto-draft' == get_post_status( $post ) ) {
    8186        if ( 'edit' == $action )
    8287                $post->post_title = '';
    8388        $autosave = false;
     
    125130                add_meta_box($tax_name . 'div', $label, 'post_categories_meta_box', null, 'side', 'core', array( 'taxonomy' => $tax_name ));
    126131}
    127132
     133if ( 'attachment' == $post_type )
     134        add_meta_box( 'attachmentdata', __('Attachment Data'), 'attachment_data_meta_box', null, 'normal', 'core' );
     135
    128136if ( post_type_supports($post_type, 'page-attributes') )
    129137        add_meta_box('pageparentdiv', 'page' == $post_type ? __('Page Attributes') : __('Attributes'), 'page_attributes_meta_box', null, 'side', 'core');
    130138
     
    144152if ( post_type_supports($post_type, 'comments') )
    145153        add_meta_box('commentstatusdiv', __('Discussion'), 'post_comment_status_meta_box', null, 'normal', 'core');
    146154
    147 if ( ('publish' == $post->post_status || 'private' == $post->post_status) && post_type_supports($post_type, 'comments') )
     155if ( ( 'publish' == get_post_status( $post ) || 'private' == get_post_status( $post ) ) && post_type_supports($post_type, 'comments') )
    148156        add_meta_box('commentsdiv', __('Comments'), 'post_comment_meta_box', null, 'normal', 'core');
    149157
    150 if ( !( 'pending' == $post->post_status && !current_user_can( $post_type_object->cap->publish_posts ) ) )
     158if ( ! ( 'pending' == get_post_status( $post ) && ! current_user_can( $post_type_object->cap->publish_posts ) ) )
    151159        add_meta_box('slugdiv', __('Slug'), 'post_slug_meta_box', null, 'normal', 'core');
    152160
    153161if ( post_type_supports($post_type, 'author') ) {
     
    158166if ( post_type_supports($post_type, 'revisions') && 0 < $post_ID && wp_get_post_revisions( $post_ID ) )
    159167        add_meta_box('revisionsdiv', __('Revisions'), 'post_revisions_meta_box', null, 'normal', 'core');
    160168
     169if ( post_type_supports( $post_type, 'image_editor' ) )
     170        add_action( 'edit_form_advanced_before', 'edit_form_image_editor' );
     171
    161172do_action('add_meta_boxes', $post_type, $post);
    162173do_action('add_meta_boxes_' . $post_type, $post);
    163174
     
    269280<input type="hidden" id="active_post_lock" value="<?php echo esc_attr( implode( ':', $active_post_lock ) ); ?>" />
    270281<?php
    271282}
    272 if ( 'draft' != $post->post_status )
     283if ( 'draft' != get_post_status( $post ) )
    273284        wp_original_referer_field(true, 'previous');
    274285
    275286echo $form_extra;
     
    283294
    284295<div id="post-body" class="metabox-holder columns-<?php echo 1 == get_current_screen()->get_columns() ? '1' : '2'; ?>">
    285296<div id="post-body-content">
    286 <?php if ( post_type_supports($post_type, 'title') ) { ?>
     297<?php
     298do_action( 'edit_form_advanced_before' );
     299
     300if ( post_type_supports($post_type, 'title') ) {
     301?>
    287302<div id="titlediv">
    288303<div id="titlewrap">
    289304        <label class="screen-reader-text" id="title-prompt-text" for="title"><?php echo apply_filters( 'enter_title_here', __( 'Enter title here' ), $post ); ?></label>
    290305        <input type="text" name="post_title" size="30" value="<?php echo esc_attr( htmlspecialchars( $post->post_title ) ); ?>" id="title" autocomplete="off" />
    291306</div>
    292307<div class="inside">
    293 <?php
    294 $sample_permalink_html = $post_type_object->public ? get_sample_permalink_html($post->ID) : '';
    295 $shortlink = wp_get_shortlink($post->ID, 'post');
    296 if ( !empty($shortlink) )
    297     $sample_permalink_html .= '<input id="shortlink" type="hidden" value="' . esc_attr($shortlink) . '" /><a href="#" class="button button-tiny" onclick="prompt(&#39;URL:&#39;, jQuery(\'#shortlink\').val()); return false;">' . __('Get Shortlink') . '</a>';
     308        <?php
     309        $sample_permalink_html = $post_type_object->public ? get_sample_permalink_html($post->ID) : '';
     310        $shortlink = wp_get_shortlink($post->ID, 'post');
     311        if ( !empty($shortlink) )
     312            $sample_permalink_html .= '<input id="shortlink" type="hidden" value="' . esc_attr($shortlink) . '" /><a href="#" class="button button-tiny" onclick="prompt(&#39;URL:&#39;, jQuery(\'#shortlink\').val()); return false;">' . __('Get Shortlink') . '</a>';
    298313
    299 if ( $post_type_object->public && ! ( 'pending' == $post->post_status && !current_user_can( $post_type_object->cap->publish_posts ) ) ) { ?>
    300         <div id="edit-slug-box">
     314        if ( $post_type_object->public && ! ( 'pending' == get_post_status( $post ) && !current_user_can( $post_type_object->cap->publish_posts ) ) ) { ?>
     315                <div id="edit-slug-box">
     316                <?php
     317                        if ( ! empty($post->ID) && ! empty($sample_permalink_html) && 'auto-draft' != get_post_status( $post ) )
     318                                echo $sample_permalink_html;
     319                ?>
     320                </div>
    301321        <?php
    302                 if ( ! empty($post->ID) && ! empty($sample_permalink_html) && 'auto-draft' != $post->post_status )
    303                         echo $sample_permalink_html;
    304         ?>
    305         </div>
    306 <?php
    307 }
     322        }
    308323?>
    309324</div>
    310325<?php
    311326wp_nonce_field( 'samplepermalink', 'samplepermalinknonce', false );
    312327?>
    313 </div>
    314 <?php } ?>
     328</div><!-- /titlediv -->
     329<?php
     330}
    315331
    316 <?php if ( post_type_supports($post_type, 'editor') ) { ?>
     332do_action( 'edit_form_after_title' );
     333
     334if ( post_type_supports($post_type, 'editor') ) {
     335?>
    317336<div id="postdivrich" class="postarea">
    318337
    319338<?php wp_editor($post->post_content, 'content', array('dfw' => true, 'tabfocus_elements' => 'sample-permalink,post-preview') ); ?>
     
    323342        <td class="autosave-info">
    324343        <span class="autosave-message">&nbsp;</span>
    325344<?php
    326         if ( 'auto-draft' != $post->post_status ) {
     345        if ( 'auto-draft' != get_post_status( $post ) ) {
    327346                echo '<span id="last-edit">';
    328347                if ( $last_id = get_post_meta($post_ID, '_edit_last', true) ) {
    329348                        $last_user = get_userdata($last_id);
     
    337356</tr></tbody></table>
    338357
    339358</div>
    340 <?php } ?>
     359<?php
     360}
     361
     362do_action( 'edit_form_after_editor' );
     363?>
    341364</div><!-- /post-body-content -->
    342365
    343366<div id="postbox-container-1" class="postbox-container">
  • wp-admin/menu.php

     
    6464        $submenu['upload.php'][5] = array( __('Library'), 'upload_files', 'upload.php');
    6565        /* translators: add new file */
    6666        $submenu['upload.php'][10] = array( _x('Add New', 'file'), 'upload_files', 'media-new.php');
     67        foreach ( get_taxonomies( array(), 'objects' ) as $tax ) {
     68                if ( ! $tax->show_ui || ! in_array('attachment', (array) $tax->object_type, true) )
     69                        continue;
    6770
     71                $submenu['upload.php'][$i++] = array( esc_attr( $tax->labels->menu_name ), $tax->cap->manage_terms, 'edit-tags.php?taxonomy=' . $tax->name . '&amp;post_type=attachment' );
     72        }
     73        unset($tax);
     74
    6875$menu[15] = array( __('Links'), 'manage_links', 'link-manager.php', '', 'menu-top menu-icon-links', 'menu-links', 'none' );
    6976        $submenu['link-manager.php'][5] = array( _x('All Links', 'admin menu'), 'manage_links', 'link-manager.php' );
    7077        /* translators: add new links */