Index: wp-includes/taxonomy.php
===================================================================
--- wp-includes/taxonomy.php (revision 7521)
+++ wp-includes/taxonomy.php (working copy)
@@ -2025,4 +2025,13 @@
return get_object_taxonomies($post);
}
+// FIXME: testing only, to be removed
+function add_test_taxonomies_alex() {
+ register_taxonomy( 'post_keyword', 'post' );
+ register_taxonomy( 'post_place', 'post' );
+}
+
+add_action('init', 'add_test_taxonomies_alex');
+
+
?>
Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php (revision 7521)
+++ wp-includes/post.php (working copy)
@@ -1301,7 +1301,15 @@
}
wp_set_post_categories( $post_ID, $post_category );
- wp_set_post_tags( $post_ID, $tags_input );
+ // old-style tags_input
+ if ( !empty($tags_input) )
+ wp_set_post_tags( $post_ID, $tags_input );
+ // new-style support for all tag-like taxonomies
+ if ( !empty($tax_input) ) {
+ foreach ( $tax_input as $taxonomy => $tags ) {
+ wp_set_post_tax( $post_ID, $taxonomy, $tags );
+ }
+ }
$current_guid = get_post_field( 'guid', $post_ID );
@@ -1455,6 +1463,10 @@
}
function wp_set_post_tags( $post_id = 0, $tags = '', $append = false ) {
+ return wp_set_post_tax( $post_id, 'post_tag', $tags, $append);
+}
+
+function wp_set_post_tax( $post_id = 0, $taxonomy='post_tag', $tags = '', $append = false ) {
/* $append - true = don't delete existing tags, just add on, false = replace the tags with the new tags */
$post_id = (int) $post_id;
@@ -1465,7 +1477,7 @@
if ( empty($tags) )
$tags = array();
$tags = (is_array($tags)) ? $tags : explode( ',', trim($tags, " \n\t\r\0\x0B,") );
- wp_set_object_terms($post_id, $tags, 'post_tag', $append);
+ wp_set_object_terms($post_id, $tags, $taxonomy, $append);
}
/**
Index: wp-admin/admin-ajax.php
===================================================================
--- wp-admin/admin-ajax.php (revision 7521)
+++ wp-admin/admin-ajax.php (working copy)
@@ -465,7 +465,7 @@
$_POST['post_status'] = 'draft';
$_POST['post_category'] = explode(",", $_POST['catslist']);
- $_POST['tags_input'] = explode(",", $_POST['tags_input']);
+ #$_POST['tags_input'] = explode(",", $_POST['tags_input']);
if($_POST['post_type'] == 'page' || empty($_POST['post_category']))
unset($_POST['post_category']);
Index: wp-admin/includes/taxonomy.php
===================================================================
--- wp-admin/includes/taxonomy.php (revision 7521)
+++ wp-admin/includes/taxonomy.php (working copy)
@@ -150,4 +150,24 @@
return wp_insert_term($tag_name, 'post_tag');
}
+//
+// Other
+//
+
+// equivalent to get_tags_to_edit(), but for any tag-like taxonomy
+function get_tax_to_edit( $post_id, $taxonomy ) {
+ $post_id = (int) $post_id;
+ if ( !$post_id )
+ return false;
+
+ $tags = wp_get_object_terms( $post_id, $taxonomy, array('fields'=>'names') );
+ if ( !$tags )
+ return false;
+
+ $tags_to_edit = join( ', ', $tags );
+ $tags_to_edit = attribute_escape( $tags_to_edit );
+ $tags_to_edit = apply_filters( 'tax_to_edit', $tags_to_edit, $taxonomy );
+ return $tags_to_edit;
+}
+
?>
Index: wp-admin/js/post.js
===================================================================
--- wp-admin/js/post.js (revision 7521)
+++ wp-admin/js/post.js (working copy)
@@ -2,8 +2,9 @@
function new_tag_remove_tag() {
var id = jQuery( this ).attr( 'id' );
- var num = id.substr( 10 );
- var current_tags = jQuery( '#tags-input' ).val().split(',');
+ var num = id.split('-check-num-')[1];
+ var obj = jQuery(this).parents('.tagsdiv');
+ var current_tags = jQuery(obj).find( '.tags-input' ).val().split(',');
delete current_tags[num];
var new_tags = [];
jQuery.each( current_tags, function( key, val ) {
@@ -11,44 +12,49 @@
new_tags = new_tags.concat( val );
}
});
- jQuery( '#tags-input' ).val( new_tags.join( ',' ).replace( /\s*,+\s*/, ',' ).replace( /,+/, ',' ).replace( /,+\s+,+/, ',' ).replace( /,+\s*$/, '' ).replace( /^\s*,+/, '' ) );
- tag_update_quickclicks();
- jQuery('#newtag').focus();
+ jQuery( obj ).find( '.tags-input' ).val( new_tags.join( ',' ).replace( /\s*,+\s*/, ',' ).replace( /,+/, ',' ).replace( /,+\s+,+/, ',' ).replace( /,+\s*$/, '' ).replace( /^\s*,+/, '' ) );
+ tag_update_quickclicks(obj);
+ jQuery( obj ).find('input.newtag').focus();
return false;
}
-function tag_update_quickclicks() {
- var current_tags = jQuery( '#tags-input' ).val().split(',');
- jQuery( '#tagchecklist' ).empty();
+function tag_update_quickclicks(obj) {
+ var current_tags = jQuery(obj).find('.tags-input').val().split(',');
+ jQuery(obj).find( '.tagchecklist' ).empty();
shown = false;
// jQuery.merge( current_tags, current_tags ); // this doesn't work anymore, need something to array_unique
jQuery.each( current_tags, function( key, val ) {
val = val.replace( /^\s+/, '' ).replace( /\s+$/, '' ); // trim
if ( !val.match(/^\s+$/) && '' != val ) {
- txt = 'X ' + val + ' ';
- jQuery( '#tagchecklist' ).append( txt );
- jQuery( '#tag-check-' + key ).click( new_tag_remove_tag );
+ var button_id = jQuery(obj).attr('id') + '-check-num-' + key;
+ txt = 'X ' + val + ' ';
+ jQuery(obj).find( '.tagchecklist' ).append( txt );
+ jQuery( '#' + button_id ).click( new_tag_remove_tag );
shown = true;
}
});
if ( shown )
- jQuery( '#tagchecklist' ).prepend( ''+postL10n.tagsUsed+'
' );
+ jQuery(obj).find( '.tagchecklist' ).prepend( ''+postL10n.tagsUsed+'
' );
}
function tag_flush_to_text() {
- var newtags = jQuery('#tags-input').val() + ',' + jQuery('#newtag').val();
+ obj = jQuery(this).parents('.tagsdiv');
+
+ var newtags = jQuery(obj).find('.tags-input').val() + ',' + jQuery(obj).find('input.newtag').val();
// massage
newtags = newtags.replace( /\s+,+\s*/g, ',' ).replace( /,+/g, ',' ).replace( /,+\s+,+/g, ',' ).replace( /,+\s*$/g, '' ).replace( /^\s*,+/g, '' );
- jQuery('#tags-input').val( newtags );
- tag_update_quickclicks();
- jQuery('#newtag').val('');
- jQuery('#newtag').focus();
+ jQuery(obj).find('.tags-input').val( newtags );
+ tag_update_quickclicks(obj);
+ jQuery(obj).find('input.newtag').val('');
+ jQuery(obj).find('input.newtag').focus();
return false;
}
function tag_save_on_publish() {
- if ( jQuery('#newtag').val() != postL10n.addTag )
- tag_flush_to_text();
+ jQuery('.tagsdiv').each( function(i) {
+ if ( jQuery(this).find('input.newtag').val() != postL10n.addTag )
+ tag_flush_to_text();
+ } );
}
function tag_press_key( e ) {
@@ -58,26 +64,20 @@
}
}
-jQuery(document).ready( function() {
- // postboxes
- add_postbox_toggles('post');
-
- // Editable slugs
- make_slugedit_clickable();
-
- // hide advanced slug field
- jQuery('#slugdiv').hide();
-
- jQuery('#tags-input').hide();
- tag_update_quickclicks();
+function tag_init() {
+ jQuery('.ajaxtag').show();
+ jQuery('.tags-input').hide();
+ jQuery('.tagsdiv').each( function(i) {
+ tag_update_quickclicks(this);
+ } );
+
// add the quickadd form
- jQuery('#jaxtag').prepend(''+postL10n.separate+'');
- jQuery('#tagadd').click( tag_flush_to_text );
- jQuery('#newtag').focus(function() {
+ jQuery('.ajaxtag input.tagadd').click( tag_flush_to_text );
+ jQuery('.ajaxtag input.newtag').focus(function() {
if ( this.value == postL10n.addTag )
jQuery(this).val( '' ).removeClass( 'form-input-tip' );
});
- jQuery('#newtag').blur(function() {
+ jQuery('.ajaxtag input.newtag').blur(function() {
if ( this.value == '' )
jQuery(this).val( postL10n.addTag ).addClass( 'form-input-tip' );
});
@@ -86,6 +86,22 @@
jQuery('#publish').click( tag_save_on_publish );
jQuery('#save-post').click( tag_save_on_publish );
+}
+
+
+jQuery(document).ready( function() {
+ // postboxes
+ add_postbox_toggles('post');
+
+ // Editable slugs
+ make_slugedit_clickable();
+
+ // hide advanced slug field
+ jQuery('#slugdiv').hide();
+
+ // prepare the tag UI
+ tag_init();
+
jQuery('#title').blur( function() { if ( (jQuery("#post_ID").val() > 0) || (jQuery("#title").val().length == 0) ) return; autosave(); } );
// auto-suggest stuff
Index: wp-admin/edit-form-advanced.php
===================================================================
--- wp-admin/edit-form-advanced.php (revision 7521)
+++ wp-admin/edit-form-advanced.php (working copy)
@@ -204,14 +204,31 @@
-