WordPress.org

Make WordPress Core

Ticket #6387: 6387-r10221.diff

File 6387-r10221.diff, 26.0 KB (added by ryan, 7 years ago)

Lose show_message(). Fix notices. Use generic terms funcs instead of passing tax to tag funcs.

  • wp-includes/taxonomy.php

     
    1717 * @global array $wp_taxonomies 
    1818 */ 
    1919$wp_taxonomies = array(); 
    20 $wp_taxonomies['category'] = (object) array('name' => 'category', 'object_type' => 'post', 'hierarchical' => true, 'update_count_callback' => '_update_post_term_count'); 
    21 $wp_taxonomies['post_tag'] = (object) array('name' => 'post_tag', 'object_type' => 'post', 'hierarchical' => false, 'update_count_callback' => '_update_post_term_count'); 
     20$wp_taxonomies['category'] = (object) array('name' => 'category', 'object_type' => 'post', 'hierarchical' => true, 'update_count_callback' => '_update_post_term_count', 'label' => __('Categories')); 
     21$wp_taxonomies['post_tag'] = (object) array('name' => 'post_tag', 'object_type' => 'post', 'hierarchical' => false, 'update_count_callback' => '_update_post_term_count', 'label' => __('Post Tags')); 
    2222$wp_taxonomies['link_category'] = (object) array('name' => 'link_category', 'object_type' => 'link', 'hierarchical' => false); 
    2323 
    2424/** 
  • wp-includes/post.php

     
    12061206 * @return array List of post tags. 
    12071207 */ 
    12081208function wp_get_post_tags( $post_id = 0, $args = array() ) { 
     1209        return wp_get_post_terms( $post_id, 'post_tag', $args); 
     1210} 
     1211 
     1212/** 
     1213 * Retrieve the terms for a post. 
     1214 * 
     1215 * There is only one default for this function, called 'fields' and by default 
     1216 * is set to 'all'. There are other defaults that can be override in 
     1217 * {@link wp_get_object_terms()}. 
     1218 * 
     1219 * @package WordPress 
     1220 * @subpackage Post 
     1221 * @since 2.8.0 
     1222 * 
     1223 * @uses wp_get_object_terms() Gets the tags for returning. Args can be found here 
     1224 * 
     1225 * @param int $post_id Optional. The Post ID 
     1226 * @param string $taxonomy The taxonomy for which to retrieve terms. Defaults to post_tag. 
     1227 * @param array $args Optional. Overwrite the defaults 
     1228 * @return array List of post tags. 
     1229 */ 
     1230function wp_get_post_terms( $post_id = 0, $taxonomy = 'post_tag', $args = array() ) { 
    12091231        $post_id = (int) $post_id; 
    12101232 
    12111233        $defaults = array('fields' => 'all'); 
    12121234        $args = wp_parse_args( $args, $defaults ); 
    12131235 
    1214         $tags = wp_get_object_terms($post_id, 'post_tag', $args); 
     1236        $tags = wp_get_object_terms($post_id, $taxonomy, $args); 
    12151237 
    12161238        return $tags; 
    12171239} 
     
    14981520        } 
    14991521 
    15001522        wp_set_post_categories( $post_ID, $post_category ); 
    1501         wp_set_post_tags( $post_ID, $tags_input ); 
     1523        // old-style tags_input 
     1524        if ( !empty($tags_input) ) 
     1525                wp_set_post_tags( $post_ID, $tags_input ); 
     1526        // new-style support for all tag-like taxonomies 
     1527        if ( !empty($tax_input) ) { 
     1528                foreach ( $tax_input as $taxonomy => $tags ) { 
     1529                        wp_set_post_terms( $post_ID, $tags, $taxonomy );                         
     1530                } 
     1531        } 
    15021532 
    15031533        $current_guid = get_post_field( 'guid', $post_ID ); 
    15041534 
     
    16851715 * @return bool|null Will return false if $post_id is not an integer or is 0. Will return null otherwise 
    16861716 */ 
    16871717function wp_set_post_tags( $post_id = 0, $tags = '', $append = false ) { 
     1718        return wp_set_post_terms( $post_id, $tags, 'post_tag', $append); 
     1719} 
    16881720 
     1721/** 
     1722 * Set the terms for a post. 
     1723 * 
     1724 * @since 2.8.0 
     1725 * @uses wp_set_object_terms() Sets the tags for the post. 
     1726 * 
     1727 * @param int $post_id Post ID. 
     1728 * @param string $tags The tags to set for the post, separated by commas. 
     1729 * @param bool $append If true, don't delete existing tags, just add on. If false, replace the tags with the new tags. 
     1730 * @return bool|null Will return false if $post_id is not an integer or is 0. Will return null otherwise 
     1731 */ 
     1732function wp_set_post_terms( $post_id = 0, $tags = '', $taxonomy = 'post_tag', $append = false ) { 
    16891733        $post_id = (int) $post_id; 
    16901734 
    16911735        if ( !$post_id ) 
     
    16931737 
    16941738        if ( empty($tags) ) 
    16951739                $tags = array(); 
    1696         $tags = (is_array($tags)) ? $tags : explode( ',', trim($tags, " \n\t\r\0\x0B,") ); 
    1697         wp_set_object_terms($post_id, $tags, 'post_tag', $append); 
     1740 
     1741        $tags = is_array($tags) ? $tags : explode( ',', trim($tags, " \n\t\r\0\x0B,") ); 
     1742        wp_set_object_terms($post_id, $tags, $taxonomy, $append); 
    16981743} 
    16991744 
    17001745/** 
  • wp-includes/js/autosave.js

     
    130130                post_ID:  jQuery("#post_ID").val() || 0, 
    131131                post_title: jQuery("#title").val() || "", 
    132132                autosavenonce: jQuery('#autosavenonce').val(), 
    133                 tags_input: jQuery("#tags-input").val() || "", 
     133                //tags_input: jQuery("#tags-input").val() || "", 
    134134                post_type: jQuery('#post_type').val() || "", 
    135135                autosave: 1 
    136136        }; 
     137         
     138        jQuery('.tags-input').each( function() { 
     139                post_data[this.name] = this.value; 
     140        } ); 
    137141 
    138142        // We always send the ajax request in order to keep the post lock fresh. 
    139143        // This (bool) tells whether or not to write the post to the DB during the ajax request. 
  • wp-includes/script-loader.php

     
    7777                'l10n_print_after' => 'try{convertEntities(wpAjax);}catch(e){};' 
    7878        ) ); 
    7979 
    80         $scripts->add( 'autosave', '/wp-includes/js/autosave.js', array('schedule', 'wp-ajax-response'), '20081210' ); 
     80        $scripts->add( 'autosave', '/wp-includes/js/autosave.js', array('schedule', 'wp-ajax-response'), '20081217' ); 
    8181 
    8282        $scripts->add( 'wp-lists', '/wp-includes/js/wp-lists.js', array('wp-ajax-response'), '20081210' ); 
    8383        $scripts->localize( 'wp-lists', 'wpListL10n', array( 
     
    179179                        'cancel' => __('Cancel'), 
    180180                        'l10n_print_after' => 'try{convertEntities(slugL10n);}catch(e){};' 
    181181                ) ); 
    182                 $scripts->add( 'post', '/wp-admin/js/post.js', array('suggest', 'jquery-ui-tabs', 'wp-lists', 'postbox', 'slug'), '20081210' ); 
     182                $scripts->add( 'post', '/wp-admin/js/post.js', array('suggest', 'jquery-ui-tabs', 'wp-lists', 'postbox', 'slug'), '20081217' ); 
    183183                $scripts->localize( 'post', 'postL10n', array( 
    184184                        'tagsUsed' =>  __('Tags used on this post:'), 
    185185                        'add' => attribute_escape(__('Add')), 
  • wp-admin/admin-ajax.php

     
    4444                die('-1'); 
    4545 
    4646        $s = $_GET['q']; // is this slashed already? 
     47         
     48        if ( isset($_GET['tax']) ) 
     49                $taxonomy = sanitize_title($_GET['tax']); 
     50        else 
     51                die('0'); 
    4752 
    4853        if ( false !== strpos( $s, ',' ) ) { 
    4954                $s = explode( ',', $s ); 
     
    5257        $s = trim( $s ); 
    5358        if ( strlen( $s ) < 2 ) 
    5459                die; // require 2 chars for matching 
    55         $results = $wpdb->get_col( "SELECT t.name FROM $wpdb->term_taxonomy AS tt INNER JOIN $wpdb->terms AS t ON tt.term_id = t.term_id WHERE tt.taxonomy = 'post_tag' AND t.name LIKE ('%". $s . "%')" ); 
     60 
     61        $results = $wpdb->get_col( "SELECT t.name FROM $wpdb->term_taxonomy AS tt INNER JOIN $wpdb->terms AS t ON tt.term_id = t.term_id WHERE tt.taxonomy = '$taxonomy' AND t.name LIKE ('%" . $s . "%')" ); 
     62 
    5663        echo join( $results, "\n" ); 
    5764        die; 
    5865        break; 
     
    490497        if ( !current_user_can( 'manage_categories' ) ) 
    491498                die('-1'); 
    492499 
    493         $tags = get_tags( array( 'number' => 45, 'orderby' => 'count', 'order' => 'DESC' ) ); 
     500        if ( isset($_POST['tax']) ) 
     501                $taxonomy = sanitize_title($_POST['tax']); 
     502        else 
     503                die('0'); 
     504         
     505        $tags = get_terms( $taxonomy, array( 'number' => 45, 'orderby' => 'count', 'order' => 'DESC' ) ); 
    494506 
    495507        if ( empty( $tags ) ) 
    496508                die( __('No tags found!') ); 
     
    776788        global $current_user; 
    777789 
    778790        $_POST['post_category'] = explode(",", $_POST['catslist']); 
    779         $_POST['tags_input'] = explode(",", $_POST['tags_input']); 
    780791        if($_POST['post_type'] == 'page' || empty($_POST['post_category'])) 
    781792                unset($_POST['post_category']); 
    782793 
  • wp-admin/wp-admin.css

     
    13551355        display: none; 
    13561356} 
    13571357 
    1358 #post-body #tagsdiv #newtag { 
     1358#post-body .tagsdiv #newtag { 
    13591359        margin-right: 5px; 
    13601360        width: 16em; 
    13611361} 
     
    13641364        width: 94% 
    13651365} 
    13661366 
    1367 #side-info-column #tagsdiv #newtag { 
     1367#side-info-column .tagsdiv #newtag { 
    13681368        width: 68%; 
    13691369} 
    13701370 
     
    14211421        padding: 5px 0; 
    14221422} 
    14231423 
    1424 #tagchecklist { 
     1424.tagchecklist { 
    14251425        margin-left: 10px; 
    14261426        font-size: 12px; 
    14271427        overflow: auto; 
    14281428} 
    14291429 
    1430 #tagchecklist strong { 
     1430.tagchecklist strong { 
    14311431        margin-left: -8px; 
    14321432        position: absolute; 
    14331433} 
    14341434 
    1435 #tagchecklist span { 
     1435.tagchecklist span { 
    14361436        margin-right: 25px; 
    14371437        display: block; 
    14381438        float: left; 
     
    14421442        cursor: default; 
    14431443} 
    14441444 
    1445 #tagchecklist span a { 
     1445.tagchecklist span a { 
    14461446        margin: 6px 0pt 0pt -9px; 
    14471447        cursor: pointer; 
    14481448        width: 10px; 
     
    28302830        margin-top: 8px; 
    28312831} 
    28322832 
    2833 #tagsdiv #the-tagcloud { 
    2834         margin: 5px 5px 10px; 
     2833#poststuff .inside .the-tagcloud { 
     2834        margin: 5px 0 10px; 
    28352835        padding: 8px; 
    28362836        border-width: 1px; 
    28372837        border-style: solid; 
  • wp-admin/includes/taxonomy.php

     
    194194 * @param unknown_type $post_id 
    195195 * @return unknown 
    196196 */ 
    197 function get_tags_to_edit( $post_id ) { 
     197function get_tags_to_edit( $post_id, $taxonomy = 'post_tag' ) { 
     198        return get_terms_to_edit( $post_id, $taxonomy); 
     199} 
     200 
     201/** 
     202 * {@internal Missing Short Description}} 
     203 * 
     204 * @since unknown 
     205 * 
     206 * @param unknown_type $post_id 
     207 * @return unknown 
     208 */ 
     209function get_terms_to_edit( $post_id, $taxonomy = 'post_tag' ) { 
    198210        $post_id = (int) $post_id; 
    199211        if ( !$post_id ) 
    200212                return false; 
    201213 
    202         $tags = wp_get_post_tags($post_id); 
     214        $tags = wp_get_post_terms($post_id, $taxonomy, array()); 
    203215 
    204216        if ( !$tags ) 
    205217                return false; 
    206218 
     219        if ( is_wp_error($tags) ) 
     220                return $tags; 
     221         
    207222        foreach ( $tags as $tag ) 
    208223                $tag_names[] = $tag->name; 
    209224        $tags_to_edit = join( ',', $tag_names ); 
    210225        $tags_to_edit = attribute_escape( $tags_to_edit ); 
    211         $tags_to_edit = apply_filters( 'tags_to_edit', $tags_to_edit ); 
     226        $tags_to_edit = apply_filters( 'terms_to_edit', $tags_to_edit, $taxonomy ); 
     227 
    212228        return $tags_to_edit; 
    213229} 
    214230 
     
    233249 * @return unknown 
    234250 */ 
    235251function wp_create_tag($tag_name) { 
    236         if ( $id = tag_exists($tag_name) ) 
     252        return wp_create_term( $tag_name, 'post_tag'); 
     253} 
     254 
     255/** 
     256 * {@internal Missing Short Description}} 
     257 * 
     258 * @since unknown 
     259 * 
     260 * @param unknown_type $tag_name 
     261 * @return unknown 
     262 */ 
     263function wp_create_term($tag_name, $taxonomy = 'post_tag') { 
     264        if ( $id = is_term($tag_name, $taxonomy) ) 
    237265                return $id; 
    238266 
    239         return wp_insert_term($tag_name, 'post_tag'); 
     267        return wp_insert_term($tag_name, $taxonomy); 
    240268} 
    241  
    242 ?> 
  • wp-admin/includes/template.php

     
    26952695 * @param string $context The context within the page where the boxes should show ('normal', 'advanced'). 
    26962696 * @param string $priority The priority within the context where the boxes should show ('high', 'low'). 
    26972697 */ 
    2698 function add_meta_box($id, $title, $callback, $page, $context = 'advanced', $priority = 'default') { 
     2698function add_meta_box($id, $title, $callback, $page, $context = 'advanced', $priority = 'default', $callback_args=null) { 
    26992699        global $wp_meta_boxes; 
    27002700 
    27012701        if ( !isset($wp_meta_boxes) ) 
     
    27292729                } elseif ( 'sorted' == $priority ) { 
    27302730                        $title = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['title']; 
    27312731                        $callback = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['callback']; 
     2732                        $callback_args = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['args']; 
    27322733                } 
    27332734                // An id can be in only one priority and one context 
    27342735                if ( $priority != $a_priority || $context != $a_context ) 
     
    27422743        if ( !isset($wp_meta_boxes[$page][$context][$priority]) ) 
    27432744                $wp_meta_boxes[$page][$context][$priority] = array(); 
    27442745 
    2745         $wp_meta_boxes[$page][$context][$priority][$id] = array('id' => $id, 'title' => $title, 'callback' => $callback); 
     2746        $wp_meta_boxes[$page][$context][$priority][$id] = array('id' => $id, 'title' => $title, 'callback' => $callback, 'args' => $callback_args); 
    27462747} 
    27472748 
    27482749/** 
  • wp-admin/js/post.js

     
    11// this file contains all the scripts used in the post/edit page 
    22 
     3// return an array with any duplicate, whitespace or values removed 
     4function array_unique_noempty(a) { 
     5        var out = []; 
     6        jQuery.each( a, function(key, val) { 
     7                val = jQuery.trim(val); 
     8                if ( val && jQuery.inArray(val, out) == -1 ) 
     9                        out.push(val); 
     10                } ); 
     11        return out; 
     12} 
     13 
    314function new_tag_remove_tag() { 
    415        var id = jQuery( this ).attr( 'id' ); 
    5         var num = id.substr( 10 ); 
    6         var current_tags = jQuery( '#tags-input' ).val().split(','); 
     16        var num = id.split('-check-num-')[1]; 
     17        var taxbox = jQuery(this).parents('.tagsdiv'); 
     18        var current_tags = taxbox.find( '.the-tags' ).val().split(','); 
    719        delete current_tags[num]; 
    820        var new_tags = []; 
    9         jQuery.each( current_tags, function( key, val ) { 
    10                 if ( val && !val.match(/^\s+$/) && '' != val ) { 
    11                         new_tags = new_tags.concat( val ); 
     21 
     22        jQuery.each( current_tags, function(key, val) { 
     23                val = jQuery.trim(val); 
     24                if ( val ) { 
     25                        new_tags.push(val); 
    1226                } 
    1327        }); 
    14         jQuery( '#tags-input' ).val( new_tags.join( ',' ).replace( /\s*,+\s*/, ',' ).replace( /,+/, ',' ).replace( /,+\s+,+/, ',' ).replace( /,+\s*$/, '' ).replace( /^\s*,+/, '' ) ); 
    15         tag_update_quickclicks(); 
    16         jQuery('#newtag').focus(); 
     28 
     29        taxbox.find('.the-tags').val( new_tags.join(',').replace(/\s*,+\s*/, ',').replace(/,+/, ',').replace(/,+\s+,+/, ',').replace(/,+\s*$/, '').replace(/^\s*,+/, '') ); 
     30 
     31        tag_update_quickclicks(taxbox); 
    1732        return false; 
    1833} 
    1934 
    20 function tag_update_quickclicks() { 
    21         if ( jQuery( '#tags-input' ).length == 0 ) 
     35function tag_update_quickclicks(taxbox) { 
     36        if ( jQuery(taxbox).find('.the-tags').length == 0 ) 
    2237                return; 
    23         var current_tags = jQuery( '#tags-input' ).val().split(','); 
    24         jQuery( '#tagchecklist' ).empty(); 
     38 
     39        var current_tags = jQuery(taxbox).find('.the-tags').val().split(','); 
     40        jQuery(taxbox).find('.tagchecklist').empty(); 
    2541        shown = false; 
    26 //      jQuery.merge( current_tags, current_tags ); // this doesn't work anymore, need something to array_unique 
     42 
    2743        jQuery.each( current_tags, function( key, val ) { 
    28                 val = val.replace( /^\s+/, '' ).replace( /\s+$/, '' ); // trim 
     44                val = jQuery.trim(val); 
    2945                if ( !val.match(/^\s+$/) && '' != val ) { 
    30                         txt = '<span><a id="tag-check-' + key + '" class="ntdelbutton">X</a>&nbsp;' + val + '</span> '; 
    31                         jQuery( '#tagchecklist' ).append( txt ); 
    32                         jQuery( '#tag-check-' + key ).click( new_tag_remove_tag ); 
    33                         shown = true; 
     46                        var button_id = jQuery(taxbox).attr('id') + '-check-num-' + key; 
     47                        txt = '<span><a id="' + button_id + '" class="ntdelbutton">X</a>&nbsp;' + val + '</span> '; 
     48                        jQuery(taxbox).find('.tagchecklist').append(txt); 
     49                        jQuery( '#' + button_id ).click( new_tag_remove_tag ); 
    3450                } 
    3551        }); 
    3652        if ( shown ) 
    37                 jQuery( '#tagchecklist' ).prepend( '<strong>'+postL10n.tagsUsed+'</strong><br />' ); 
     53                jQuery(taxbox).find('.tagchecklist').prepend('<strong>'+postL10n.tagsUsed+'</strong><br />'); 
    3854} 
    3955 
    40 function tag_flush_to_text(e,a) { 
     56function tag_flush_to_text(id, a) { 
    4157        a = a || false; 
    42         var text = a ? jQuery(a).text() : jQuery('#newtag').val(); 
    43         var newtags = jQuery('#tags-input').val(); 
     58        var taxbox = jQuery('#'+id); 
     59        var text = a ? jQuery(a).text() : taxbox.find('input.newtag').val(); 
    4460 
    45         var t = text.replace( /\s*([^,]+).*/, '$1,' ); 
    46         newtags += ',' 
    47  
    48         if ( newtags.indexOf(t) != -1 ) 
     61        // is the input box empty (i.e. showing the 'Add new tag' tip)? 
     62        if ( taxbox.find('input.newtag').hasClass('form-input-tip') && ! a ) 
    4963                return false; 
    5064 
    51         newtags += text; 
     65        var tags = taxbox.find('.the-tags').val(); 
     66        var newtags = tags ? tags + ',' + text : text; 
    5267 
    5368        // massage 
    54         newtags = newtags.replace( /\s+,+\s*/g, ',' ).replace( /,+/g, ',' ).replace( /,+\s+,+/g, ',' ).replace( /,+\s*$/g, '' ).replace( /^\s*,+/g, '' ); 
    55         jQuery('#tags-input').val( newtags ); 
    56         tag_update_quickclicks(); 
    57         if ( ! a ) { 
    58                 jQuery('#newtag').val(''); 
    59                 jQuery('#newtag').focus(); 
    60         } 
     69        newtags = newtags.replace(/\s+,+\s*/g, ',').replace(/,+/g, ',').replace(/,+\s+,+/g, ',').replace(/,+\s*$/g, '').replace(/^\s*,+/g, ''); 
     70        newtags = array_unique_noempty(newtags.split(',')).join(','); 
     71        taxbox.find('.the-tags').val(newtags); 
     72        tag_update_quickclicks(taxbox); 
     73         
     74        if ( ! a ) 
     75                taxbox.find('input.newtag').val('').focus(); 
     76 
    6177        return false; 
    6278} 
    6379 
    6480function tag_save_on_publish() { 
    65         if ( jQuery('#newtag').val() != postL10n.addTag ) 
    66                 tag_flush_to_text(); 
     81        jQuery('.tagsdiv').each( function(i) { 
     82                if ( !jQuery(this).find('input.newtag').hasClass('form-input-tip') ) 
     83                tag_flush_to_text(jQuery(this).parents('.tagsdiv').attr('id')); 
     84                } ); 
    6785} 
    6886 
    6987function tag_press_key( e ) { 
    70         if ( 13 == e.keyCode ) { 
    71                 tag_flush_to_text(); 
     88        if ( 13 == e.which ) { 
     89                tag_flush_to_text(jQuery(e.target).parents('.tagsdiv').attr('id')); 
    7290                return false; 
    7391        } 
    7492}; 
    7593 
     94function tag_init() { 
     95 
     96        jQuery('.ajaxtag').show(); 
     97    jQuery('.tagsdiv').each( function(i) { 
     98        tag_update_quickclicks(this); 
     99    } ); 
     100 
     101    // add the quickadd form 
     102    jQuery('.ajaxtag input.tagadd').click(function(){tag_flush_to_text(jQuery(this).parents('.tagsdiv').attr('id'));}); 
     103    jQuery('.ajaxtag input.newtag').focus(function() { 
     104        if ( this.value == postL10n.addTag ) { 
     105            jQuery(this).val( '' ).removeClass( 'form-input-tip' ); 
     106        } 
     107    }); 
     108 
     109    jQuery('.ajaxtag input.newtag').blur(function() { 
     110        if ( this.value == '' ) { 
     111            jQuery(this).val( postL10n.addTag ).addClass( 'form-input-tip' ); 
     112        } 
     113    }); 
     114 
     115    // auto-save tags on post save/publish 
     116    jQuery('#publish').click( tag_save_on_publish ); 
     117    jQuery('#save-post').click( tag_save_on_publish ); 
     118 
     119    // catch the enter key 
     120    jQuery('.ajaxtag input.newtag').keypress( tag_press_key ); 
     121} 
     122 
    76123(function($){ 
    77124        tagCloud = { 
    78125                init : function() { 
    79                         $('#tagcloud-link').click(function(){tagCloud.get(); $(this).unbind().click(function(){return false;}); return false;}); 
     126                        $('.tagcloud-link').click(function(){tagCloud.get($(this).attr('id')); $(this).unbind().click(function(){return false;}); return false;}); 
    80127                }, 
    81128 
    82                 get : function() { 
    83                         $.post('admin-ajax.php', {'action':'get-tagcloud'}, function(r, stat) { 
     129                get : function(id) { 
     130                        tax = id.substr(id.indexOf('-')+1); 
     131 
     132                        $.post('admin-ajax.php', {'action':'get-tagcloud','tax':tax}, function(r, stat) { 
    84133                                if ( 0 == r || 'success' != stat ) 
    85134                                        r = wpAjax.broken; 
    86135 
    87                                 r = '<p id="the-tagcloud">'+r+'</p>'; 
    88                                 $('#tagcloud-link').after($(r)); 
    89                                 $('#the-tagcloud a').click(function(){ 
    90                                         tag_flush_to_text(0,this); 
     136                                r = $('<p id="tagcloud-'+tax+'" class="the-tagcloud">'+r+'</p>'); 
     137                                $('a', r).click(function(){ 
     138                                        var id = $(this).parents('p').attr('id'); 
     139                                        tag_flush_to_text(id.substr(id.indexOf('-')+1), this); 
    91140                                        return false; 
    92141                                }); 
     142 
     143                                $('#'+id).after(r); 
    93144                        }); 
    94145                } 
    95146        } 
     
    107158        // Editable slugs 
    108159        make_slugedit_clickable(); 
    109160 
    110         jQuery('#tags-input').hide(); 
    111         tag_update_quickclicks(); 
    112         // add the quickadd form 
    113         jQuery('#jaxtag').prepend('<span id="ajaxtag"><input type="text" name="newtag" id="newtag" class="form-input-tip" size="16" autocomplete="off" value="'+postL10n.addTag+'" /><input type="button" class="button" id="tagadd" value="' + postL10n.add + '" tabindex="3" /><input type="hidden"/><input type="hidden"/><span class="howto">'+postL10n.separate+'</span></span>'); 
    114         jQuery('#tagadd').click( tag_flush_to_text ); 
    115         jQuery('#newtag').focus(function() { 
    116                 if ( this.value == postL10n.addTag ) 
    117                         jQuery(this).val( '' ).removeClass( 'form-input-tip' ); 
    118         }); 
    119         jQuery('#newtag').blur(function() { 
    120                 if ( this.value == '' ) 
    121                         jQuery(this).val( postL10n.addTag ).addClass( 'form-input-tip' ); 
    122         }); 
     161        // prepare the tag UI 
     162        tag_init(); 
    123163 
    124         // auto-save tags on post save/publish 
    125         jQuery('#publish').click( tag_save_on_publish ); 
    126         jQuery('#save-post').click( tag_save_on_publish ); 
    127  
    128164        jQuery('#title').blur( function() { if ( (jQuery("#post_ID").val() > 0) || (jQuery("#title").val().length == 0) ) return; autosave(); } ); 
    129165 
    130166        // auto-suggest stuff 
    131         jQuery('#newtag').suggest( 'admin-ajax.php?action=ajax-tag-search', { delay: 500, minchars: 2, multiple: true, multipleSep: ", " } ); 
    132         jQuery('#newtag').keypress( tag_press_key ); 
     167        jQuery('.newtag').each(function(){ 
     168                var tax = $(this).parents('div.tagsdiv').attr('id'); 
     169                $(this).suggest( 'admin-ajax.php?action=ajax-tag-search&tax='+tax, { delay: 500, minchars: 2, multiple: true, multipleSep: ", " } ); 
     170        }); 
    133171 
    134172        // category tabs 
    135173        var categoryTabs =jQuery('#category-tabs').tabs(); 
  • wp-admin/rtl.css

     
    211211#normal-sortables .postbox .submit { 
    212212        float: left; 
    213213} 
    214 #post-body #tagsdiv #newtag { 
     214#post-body .tagsdiv #newtag { 
    215215        margin-right: 0; 
    216216        margin-left: 5px; 
    217217} 
     
    221221#comment-status-radio input { 
    222222        margin: 2px 0 5px 3px; 
    223223} 
    224 #tagchecklist { 
     224.tagchecklist { 
    225225        margin-left: 0; 
    226226        margin-right: 10px; 
    227227} 
    228 #tagchecklist strong { 
     228.tagchecklist strong { 
    229229        margin-left: 0; 
    230230        margin-right: -8px; 
    231231} 
    232 #tagchecklist span { 
     232.tagchecklist span { 
    233233        float: right; 
    234234} 
    235 #tagchecklist span a { 
     235.tagchecklist span a { 
    236236        margin: 6px -9px 0 0; 
    237237        float: right; 
    238238} 
  • wp-admin/edit-form-advanced.php

     
    263263 * 
    264264 * @param object $post 
    265265 */ 
    266 function post_tags_meta_box($post) { 
     266function post_tags_meta_box($post, $box) { 
     267        $tax_name = substr($box['id'], 8);  
     268        $taxonomy = get_taxonomy($tax_name); 
     269        if ( isset($taxonomy->helps) ) 
     270                $helps = attribute_escape($taxonomy->helps); 
     271        else 
     272                $helps = ''; 
    267273?> 
    268 <p id="jaxtag"><label class="hidden" for="newtag"><?php _e('Tags'); ?></label><input type="text" name="tags_input" class="tags-input" id="tags-input" size="40" tabindex="3" value="<?php echo get_tags_to_edit( $post->ID ); ?>" /></p> 
    269 <div id="tagchecklist"></div> 
    270 <p id="tagcloud-link" class="hide-if-no-js"><a href='#'><?php _e( 'Choose from the most popular tags' ); ?></a></p> 
     274<div class="tagsdiv" id="<?php echo $tax_name; ?>">  
     275        <p class="jaxtag"> 
     276                <label class="hidden" for="newtag"><?php _e( $box['title'] ); ?></label> 
     277                <input type="hidden" name="<?php echo "tax_input[$tax_name]"; ?>" class="the-tags" id="tax-input[<?php echo $tax_name; ?>]" value="<?php echo get_terms_to_edit( $post->ID, $tax_name ); ?>" />  
     278          
     279        <span class="ajaxtag" style="display:none;"> 
     280                <input type="text" name="newtag[<?php echo $tax_name; ?>]" class="newtag form-input-tip" size="16" autocomplete="off" value="<?php _e('Add new tag'); ?>" /> 
     281                <input type="button" class="button tagadd" value="<?php _e('Add'); ?>" tabindex="3" /> 
     282        </span> 
     283        <?php echo $helps ? "<div class='howto'>$helps</div>" : ''; ?> 
     284        </p>  
     285        <div class="tagchecklist"></div>  
     286</div>  
     287<p class="tagcloud-link hide-if-no-js"><a href="#titlediv" class="tagcloud-link" id="link-<?php echo $tax_name; ?>"><?php printf( __('Choose from the most used tags in %s'), $box['title'] ); ?></a></p> 
    271288<?php 
    272289} 
    273 add_meta_box('tagsdiv', __('Tags'), 'post_tags_meta_box', 'post', 'side', 'core'); 
    274290 
     291// all tag-style post taxonomies  
     292foreach ( get_object_taxonomies('post') as $tax_name ) {  
     293        if ( !is_taxonomy_hierarchical($tax_name) ) {  
     294                $taxonomy = get_taxonomy($tax_name); 
     295                $label = isset($taxonomy->label) ? attribute_escape($taxonomy->label) : $tax_name; 
     296 
     297                add_meta_box('tagsdiv-' . $tax_name, $label, 'post_tags_meta_box', 'post', 'side', 'core');  
     298        }  
     299}  
     300 
    275301/** 
    276302 * Display post categories form fields. 
    277303 * 
  • wp-admin/css/ie-rtl.css

     
    4444        padding-right: 0; 
    4545        padding-left: 1px; 
    4646} 
    47 #tagchecklist span a { 
     47.tagchecklist span a { 
    4848        margin: 4px -9px 0 0; 
    4949} 
    5050.widefat th input { 
  • wp-admin/css/ie.css

     
    245245li.widget-list-control-item h4, 
    246246.widget-sortable, 
    247247.widget-control-actions, 
    248 #tagchecklist, 
     248.tagchecklist, 
    249249#col-container, 
    250250#col-left, 
    251251#col-right { 
     
    296296        padding-right: 1px; 
    297297} 
    298298 
    299 #tagchecklist span, #tagchecklist span a { 
     299.tagchecklist span, .tagchecklist span a { 
    300300        display: inline-block; 
    301301        display: block; 
    302302} 
    303303 
    304 #tagchecklist span a { 
     304.tagchecklist span a { 
    305305        margin: 4px 0 0 -9px; 
    306306} 
    307307 
  • wp-admin/css/colors-fresh.css

     
    682682        color: #448abd; 
    683683} 
    684684 
    685 #tagchecklist span a, 
     685.tagchecklist span a, 
    686686#bulk-titles div a { 
    687687        background: url(../images/xit.gif) no-repeat; 
    688688} 
    689689 
    690 #tagchecklist span a:hover, 
     690.tagchecklist span a:hover, 
    691691#bulk-titles div a:hover { 
    692692        background: url(../images/xit.gif) no-repeat -10px 0; 
    693693} 
     
    10071007 
    10081008#timestampdiv input, 
    10091009#namediv input, 
    1010 #tagsdiv #the-tagcloud { 
     1010#poststuff .inside .the-tagcloud { 
    10111011        border-color: #ddd; 
    10121012} 
    10131013 
  • wp-admin/css/colors-classic.css

     
    682682        color: #448abd; 
    683683} 
    684684 
    685 #tagchecklist span a, 
     685.tagchecklist span a, 
    686686#bulk-titles div a { 
    687687        background: url(../images/xit.gif) no-repeat; 
    688688} 
    689689 
    690 #tagchecklist span a:hover, 
     690.tagchecklist span a:hover, 
    691691#bulk-titles div a:hover { 
    692692        background: url(../images/xit.gif) no-repeat -10px 0; 
    693693} 
     
    10071007 
    10081008#timestampdiv input, 
    10091009#namediv input, 
    1010 #tagsdiv #the-tagcloud { 
     1010#poststuff .inside .the-tagcloud { 
    10111011        border-color: #ddd; 
    10121012} 
    10131013