Create metaboxes for hierarchical taxonomies. Props prettyboymp. fixes #10122
git-svn-id: http://svn.automattic.com/wordpress/trunk@12798 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
a731cbed8e
commit
b1b44019ff
|
@ -200,6 +200,81 @@ function _wp_ajax_delete_comment_response( $comment_id ) {
|
|||
$x->send();
|
||||
}
|
||||
|
||||
function _wp_ajax_add_hierarchical_term() {
|
||||
$action = $_POST['action'];
|
||||
$taxonomy = get_taxonomy(substr($action, 4));
|
||||
check_ajax_referer( $action );
|
||||
if ( !current_user_can( 'manage_categories' ) )
|
||||
die('-1');
|
||||
$names = explode(',', $_POST['new'.$taxonomy->name]);
|
||||
$parent = isset($_POST['new'.$taxonomy->name.'_parent']) ? (int) $_POST['new'.$taxonomy->name.'_parent'] : 0;
|
||||
if ( 0 > $parent )
|
||||
$parent = 0;
|
||||
if ( $taxonomy->name == 'category' )
|
||||
$post_category = isset($_POST['post_category']) ? (array) $_POST['post_category'] : array();
|
||||
else
|
||||
$post_category = ( isset($_POST['tax_input']) && isset($_POST['tax_input'][$taxonomy->name]) ) ? (array) $_POST['tax_input'][$taxonomy->name] : array();
|
||||
$checked_categories = array_map( 'absint', (array) $post_category );
|
||||
$popular_ids = wp_popular_terms_checklist($taxonomy->name, 0, 10, false);
|
||||
|
||||
foreach ( $names as $cat_name ) {
|
||||
$cat_name = trim($cat_name);
|
||||
$category_nicename = sanitize_title($cat_name);
|
||||
if ( '' === $category_nicename )
|
||||
continue;
|
||||
if ( !($cat_id = is_term($cat_name, $taxonomy->name, $parent)) ) {
|
||||
$new_term = wp_insert_term($cat_name, $taxonomy->name, array('parent' => $parent));
|
||||
$cat_id = $new_term['term_id'];
|
||||
}
|
||||
$checked_categories[] = $cat_id;
|
||||
if ( $parent ) // Do these all at once in a second
|
||||
continue;
|
||||
$category = get_term( $cat_id, $taxonomy->name );
|
||||
ob_start();
|
||||
wp_terms_checklist( 0, array( 'taxonomy' => $taxonomy->name, 'descendants_and_self' => $cat_id, 'selected_cats' => $checked_categories, 'popular_cats' => $popular_ids ));
|
||||
$data = ob_get_contents();
|
||||
ob_end_clean();
|
||||
$add = array(
|
||||
'what' => $taxonomy->name,
|
||||
'id' => $cat_id,
|
||||
'data' => str_replace( array("\n", "\t"), '', $data),
|
||||
'position' => -1
|
||||
);
|
||||
}
|
||||
|
||||
if ( $parent ) { // Foncy - replace the parent and all its children
|
||||
$parent = get_term( $parent, $taxonomy->name );
|
||||
$term_id = $parent->term_id;
|
||||
|
||||
while ( $parent->parent ) { // get the top parent
|
||||
$parent = &get_term( $parent->parent, $taxonomy->name );
|
||||
if ( is_wp_error( $parent ) )
|
||||
break;
|
||||
$term_id = $parent->term_id;
|
||||
}
|
||||
|
||||
ob_start();
|
||||
wp_terms_checklist( 0, array('taxonomy' => $taxonomy->name, 'descendants_and_self' => $term_id, 'selected_cats' => $checked_categories, 'popular_cats' => $popular_ids));
|
||||
$data = ob_get_contents();
|
||||
ob_end_clean();
|
||||
$add = array(
|
||||
'what' => $taxonomy->name,
|
||||
'id' => $term_id,
|
||||
'data' => str_replace( array("\n", "\t"), '', $data),
|
||||
'position' => -1
|
||||
);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
wp_dropdown_categories( array( 'taxonomy' => $taxonomy->name, 'hide_empty' => 0, 'name' => 'new'.$taxonomy->name.'_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => __('Parent category') ) );
|
||||
$sup = ob_get_contents();
|
||||
ob_end_clean();
|
||||
$add['supplemental'] = array( 'newcat_parent' => $sup );
|
||||
|
||||
$x = new WP_Ajax_Response( $add );
|
||||
$x->send();
|
||||
}
|
||||
|
||||
$id = isset($_POST['id'])? (int) $_POST['id'] : 0;
|
||||
switch ( $action = $_POST['action'] ) :
|
||||
case 'delete-comment' : // On success, die with time() instead of 1
|
||||
|
@ -409,70 +484,6 @@ case 'dim-comment' : // On success, die with time() instead of 1
|
|||
_wp_ajax_delete_comment_response( $comment->comment_ID );
|
||||
die( '0' );
|
||||
break;
|
||||
case 'add-category' : // On the Fly
|
||||
check_ajax_referer( $action );
|
||||
if ( !current_user_can( 'manage_categories' ) )
|
||||
die('-1');
|
||||
$names = explode(',', $_POST['newcat']);
|
||||
if ( 0 > $parent = (int) $_POST['newcat_parent'] )
|
||||
$parent = 0;
|
||||
$post_category = isset($_POST['post_category'])? (array) $_POST['post_category'] : array();
|
||||
$checked_categories = array_map( 'absint', (array) $post_category );
|
||||
$popular_ids = wp_popular_terms_checklist('category', 0, 10, false);
|
||||
|
||||
foreach ( $names as $cat_name ) {
|
||||
$cat_name = trim($cat_name);
|
||||
$category_nicename = sanitize_title($cat_name);
|
||||
if ( '' === $category_nicename )
|
||||
continue;
|
||||
$cat_id = wp_create_category( $cat_name, $parent );
|
||||
$checked_categories[] = $cat_id;
|
||||
if ( $parent ) // Do these all at once in a second
|
||||
continue;
|
||||
$category = get_category( $cat_id );
|
||||
ob_start();
|
||||
wp_category_checklist( 0, $cat_id, $checked_categories, $popular_ids );
|
||||
$data = ob_get_contents();
|
||||
ob_end_clean();
|
||||
$add = array(
|
||||
'what' => 'category',
|
||||
'id' => $cat_id,
|
||||
'data' => str_replace( array("\n", "\t"), '', $data),
|
||||
'position' => -1
|
||||
);
|
||||
}
|
||||
if ( $parent ) { // Foncy - replace the parent and all its children
|
||||
$parent = get_category( $parent );
|
||||
$term_id = $parent->term_id;
|
||||
|
||||
while ( $parent->parent ) { // get the top parent
|
||||
$parent = &get_category( $parent->parent );
|
||||
if ( is_wp_error( $parent ) )
|
||||
break;
|
||||
$term_id = $parent->term_id;
|
||||
}
|
||||
|
||||
ob_start();
|
||||
wp_category_checklist( 0, $term_id, $checked_categories, $popular_ids, null, false );
|
||||
$data = ob_get_contents();
|
||||
ob_end_clean();
|
||||
$add = array(
|
||||
'what' => 'category',
|
||||
'id' => $term_id,
|
||||
'data' => str_replace( array("\n", "\t"), '', $data),
|
||||
'position' => -1
|
||||
);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
wp_dropdown_categories( array( 'hide_empty' => 0, 'name' => 'newcat_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => __('Parent category') ) );
|
||||
$sup = ob_get_contents();
|
||||
ob_end_clean();
|
||||
$add['supplemental'] = array( 'newcat_parent' => $sup );
|
||||
|
||||
$x = new WP_Ajax_Response( $add );
|
||||
$x->send();
|
||||
break;
|
||||
case 'add-link-category' : // On the Fly
|
||||
check_ajax_referer( $action );
|
||||
if ( !current_user_can( 'manage_categories' ) )
|
||||
|
@ -511,7 +522,7 @@ case 'add-cat' : // From Manage->Categories
|
|||
$x->send();
|
||||
}
|
||||
|
||||
if ( category_exists( trim( $_POST['cat_name'] ), $_POST['category_parent'] ) ) {
|
||||
if ( is_term( trim( $_POST['cat_name'] ), $_POST['taxonomy'], $_POST['category_parent'] ) ) {
|
||||
$x = new WP_Ajax_Response( array(
|
||||
'what' => 'cat',
|
||||
'id' => new WP_Error( 'cat_exists', __('The category you are trying to create already exists.'), array( 'form-field' => 'cat_name' ) ),
|
||||
|
@ -529,7 +540,7 @@ case 'add-cat' : // From Manage->Categories
|
|||
$x->send();
|
||||
}
|
||||
|
||||
if ( !$cat || (!$cat = get_category( $cat )) )
|
||||
if ( !$cat || (!$cat = get_term( $cat, $_POST['taxonomy'] ) ) )
|
||||
die('0');
|
||||
|
||||
$level = 0;
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -110,11 +110,11 @@ div.dashboard-widget-submit {
|
|||
}
|
||||
|
||||
div.tabs-panel,
|
||||
ul#category-tabs li.tabs {
|
||||
ul.category-tabs li.tabs {
|
||||
border-color: #dfdfdf;
|
||||
}
|
||||
|
||||
ul#category-tabs li.tabs {
|
||||
ul.category-tabs li.tabs {
|
||||
background-color: #f1f1f1;
|
||||
}
|
||||
|
||||
|
@ -384,7 +384,7 @@ div.dashboard-widget-submit input:hover,
|
|||
background: #faf9f7 !important;
|
||||
}
|
||||
|
||||
#side-sortables #category-tabs .tabs a {
|
||||
#side-sortables .category-tabs .tabs a {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
|
@ -1463,7 +1463,7 @@ fieldset.inline-edit-col-right .inline-edit-col {
|
|||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
#post-body ul#category-tabs li.tabs a {
|
||||
#post-body ul.category-tabs li.tabs a {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -110,11 +110,11 @@ div.dashboard-widget-submit {
|
|||
}
|
||||
|
||||
div.tabs-panel,
|
||||
ul#category-tabs li.tabs {
|
||||
ul.category-tabs li.tabs {
|
||||
border-color: #dfdfdf;
|
||||
}
|
||||
|
||||
ul#category-tabs li.tabs {
|
||||
ul.category-tabs li.tabs {
|
||||
background-color: #f1f1f1;
|
||||
}
|
||||
|
||||
|
@ -380,7 +380,7 @@ div.dashboard-widget-submit input:hover,
|
|||
border-color: #dfdfdf;
|
||||
}
|
||||
|
||||
#side-sortables #category-tabs .tabs a {
|
||||
#side-sortables .category-tabs .tabs a {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
|
@ -1458,7 +1458,7 @@ fieldset.inline-edit-col-right .inline-edit-col {
|
|||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
#post-body ul#category-tabs li.tabs a {
|
||||
#post-body ul.category-tabs li.tabs a {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -115,7 +115,7 @@ div.zerosize {
|
|||
}
|
||||
|
||||
#tagsdiv-post_tag h3,
|
||||
#categorydiv h3 {
|
||||
.categorydiv h3 {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
@ -308,15 +308,15 @@ h3.tb {
|
|||
display: none;
|
||||
}
|
||||
|
||||
#category-adder {
|
||||
.category-adder {
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
#category-adder h4 {
|
||||
.category-adder h4 {
|
||||
margin: 0 0 8px;
|
||||
}
|
||||
|
||||
#category-add input {
|
||||
.category-add input {
|
||||
width: 94%;
|
||||
font-family: Verdana,Arial,Helvetica,sans-serif;
|
||||
font-size: 13px;
|
||||
|
@ -324,7 +324,7 @@ h3.tb {
|
|||
padding: 3px;
|
||||
}
|
||||
|
||||
#category-add select {
|
||||
.category-add select {
|
||||
width: 70%;
|
||||
-x-system-font: none;
|
||||
border-style: solid;
|
||||
|
@ -338,24 +338,24 @@ h3.tb {
|
|||
vertical-align: top;
|
||||
}
|
||||
|
||||
#category-add input,
|
||||
#category-add-sumbit {
|
||||
.category-add input,
|
||||
.category-add-sumbit {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
/* Categories */
|
||||
#categorydiv ul,
|
||||
.categorydiv ul,
|
||||
#linkcategorydiv ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#categorydiv ul.categorychecklist ul {
|
||||
.categorydiv ul.categorychecklist ul {
|
||||
margin-left: 18px;
|
||||
}
|
||||
|
||||
#categorydiv div.tabs-panel {
|
||||
.categorydiv div.tabs-panel {
|
||||
height: 140px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
|
|
@ -294,11 +294,11 @@ td.available-theme {
|
|||
margin-left: 4px;
|
||||
}
|
||||
/* Categories */
|
||||
#category-adder {
|
||||
.category-adder {
|
||||
margin-left: 0;
|
||||
margin-right: 120px;
|
||||
}
|
||||
#post-body ul#category-tabs li.tabs {
|
||||
#post-body ul.category-tabs li.tabs {
|
||||
-moz-border-radius: 0 3px 3px 0;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-webkit-border-top-right-radius: 3px;
|
||||
|
@ -309,22 +309,22 @@ td.available-theme {
|
|||
border-bottom-left-radius: 0;
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
#post-body ul#category-tabs {
|
||||
#post-body ul.category-tabs {
|
||||
float: right;
|
||||
text-align: left;
|
||||
margin: 0 0 0 -120px;
|
||||
}
|
||||
#post-body #categorydiv div.tabs-panel,
|
||||
#post-body .categorydiv div.tabs-panel,
|
||||
#post-body #linkcategorydiv div.tabs-panel {
|
||||
margin: 0 120px 0 5px;
|
||||
}
|
||||
/* 1800 - 2000
|
||||
=================================== */
|
||||
#side-sortables #category-tabs li {
|
||||
#side-sortables .category-tabs li {
|
||||
padding-right: 0;
|
||||
padding-left: 8px;
|
||||
}
|
||||
#categorydiv ul.categorychecklist ul,
|
||||
.categorydiv ul.categorychecklist ul,
|
||||
#linkcategorydiv ul.categorychecklist ul {
|
||||
margin-left: 0;
|
||||
margin-right: 18px;
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1928,36 +1928,36 @@ input#link_url {
|
|||
|
||||
/* Categories */
|
||||
|
||||
#category-adder {
|
||||
.category-adder {
|
||||
margin-left: 120px;
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
#category-adder h4 {
|
||||
.category-adder h4 {
|
||||
margin: 0 0 8px;
|
||||
}
|
||||
|
||||
#side-sortables #category-adder {
|
||||
#side-sortables .category-adder {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#post-body #category-add input, #category-add select {
|
||||
#post-body .category-add input, .category-add select {
|
||||
width: 30%;
|
||||
}
|
||||
|
||||
#side-sortables #category-add input {
|
||||
#side-sortables .category-add input {
|
||||
width: 94%;
|
||||
}
|
||||
|
||||
#side-sortables #category-add select {
|
||||
#side-sortables .category-add select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#category-add input#category-add-sumbit {
|
||||
#side-sortables .category-add input.category-add-sumbit, #post-body .category-add input.category-add input.category-add-sumbit {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
#post-body ul#category-tabs {
|
||||
#post-body ul.category-tabs {
|
||||
float: left;
|
||||
width: 120px;
|
||||
text-align: right;
|
||||
|
@ -1966,11 +1966,11 @@ input#link_url {
|
|||
padding: 0;
|
||||
}
|
||||
|
||||
#post-body ul#category-tabs li {
|
||||
#post-body ul.category-tabs li {
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
#post-body ul#category-tabs li.tabs {
|
||||
#post-body ul.category-tabs li.tabs {
|
||||
-moz-border-radius: 3px 0 0 3px;
|
||||
-webkit-border-top-left-radius: 3px;
|
||||
-webkit-border-bottom-left-radius: 3px;
|
||||
|
@ -1980,12 +1980,12 @@ input#link_url {
|
|||
border-bottom-left-radius: 3px;
|
||||
}
|
||||
|
||||
#post-body ul#category-tabs li.tabs a {
|
||||
#post-body ul.category-tabs li.tabs a {
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#categorydiv div.tabs-panel,
|
||||
.categorydiv div.tabs-panel,
|
||||
#linkcategorydiv div.tabs-panel {
|
||||
height: 200px;
|
||||
overflow: auto;
|
||||
|
@ -1994,32 +1994,32 @@ input#link_url {
|
|||
border-width: 1px;
|
||||
}
|
||||
|
||||
#post-body #categorydiv div.tabs-panel,
|
||||
#post-body .categorydiv div.tabs-panel,
|
||||
#post-body #linkcategorydiv div.tabs-panel {
|
||||
margin: 0 5px 0 125px;
|
||||
}
|
||||
|
||||
#side-sortables #category-tabs li {
|
||||
#side-sortables .category-tabs li {
|
||||
display: inline;
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
#side-sortables #category-tabs a {
|
||||
#side-sortables .category-tabs a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#side-sortables #category-tabs {
|
||||
#side-sortables .category-tabs {
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
#categorydiv ul,
|
||||
.categorydiv ul,
|
||||
#linkcategorydiv ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#categorydiv ul.categorychecklist ul,
|
||||
.categorydiv ul.categorychecklist ul,
|
||||
#linkcategorydiv ul.categorychecklist ul {
|
||||
margin-left: 18px;
|
||||
}
|
||||
|
@ -2030,32 +2030,32 @@ ul.categorychecklist li {
|
|||
line-height: 19px;
|
||||
}
|
||||
|
||||
#category-adder h4 {
|
||||
.category-adder h4 {
|
||||
margin-top: 4px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
#categorydiv .tabs-panel {
|
||||
.categorydiv .tabs-panel {
|
||||
border-width: 3px;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
ul#category-tabs {
|
||||
ul.category-tabs {
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
ul#category-tabs li.tabs {
|
||||
ul.category-tabs li.tabs {
|
||||
border-style: solid solid none;
|
||||
border-width: 1px 1px 0;
|
||||
}
|
||||
|
||||
#post-body #category-tabs li.tabs {
|
||||
#post-body .category-tabs li.tabs {
|
||||
border-style: solid none solid solid;
|
||||
border-width: 1px 0 1px 1px;
|
||||
margin-right: -1px;
|
||||
}
|
||||
|
||||
ul#category-tabs li {
|
||||
ul.category-tabs li {
|
||||
padding: 5px 8px;
|
||||
-moz-border-radius: 3px 3px 0 0;
|
||||
-webkit-border-top-left-radius: 3px;
|
||||
|
|
|
@ -94,16 +94,14 @@ add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', $post_type, 'si
|
|||
|
||||
// all tag-style taxonomies
|
||||
foreach ( get_object_taxonomies($post_type) as $tax_name ) {
|
||||
if ( !is_taxonomy_hierarchical($tax_name) ) {
|
||||
$taxonomy = get_taxonomy($tax_name);
|
||||
$label = isset($taxonomy->label) ? esc_attr($taxonomy->label) : $tax_name;
|
||||
|
||||
if ( !is_taxonomy_hierarchical($tax_name) )
|
||||
add_meta_box('tagsdiv-' . $tax_name, $label, 'post_tags_meta_box', $post_type, 'side', 'core');
|
||||
else
|
||||
add_meta_box($tax_name.'div', $label, 'post_categories_meta_box', 'post', 'side', 'core', array( 'taxonomy' => $tax_name ));
|
||||
}
|
||||
}
|
||||
|
||||
if ( is_object_in_taxonomy($post_type, 'category') )
|
||||
add_meta_box('categorydiv', __('Categories'), 'post_categories_meta_box', $post_type, 'side', 'core');
|
||||
|
||||
if ( post_type_supports($post_type, 'page-attributes') )
|
||||
add_meta_box('pageparentdiv', __('Attributes'), 'page_attributes_meta_box', $post_type, 'side', 'core');
|
||||
|
|
|
@ -268,38 +268,46 @@ function post_tags_meta_box($post, $box) {
|
|||
*
|
||||
* @param object $post
|
||||
*/
|
||||
function post_categories_meta_box($post) {
|
||||
function post_categories_meta_box( $post, $box ) {
|
||||
$defaults = array('taxonomy' => 'category');
|
||||
if ( !isset($box['args']) || !is_array($box['args']) )
|
||||
$args = array();
|
||||
else
|
||||
$args = $box['args'];
|
||||
extract( wp_parse_args($args, $defaults), EXTR_SKIP );
|
||||
?>
|
||||
<ul id="category-tabs">
|
||||
<li class="tabs"><a href="#categories-all" tabindex="3"><?php _e( 'All Categories' ); ?></a></li>
|
||||
<li class="hide-if-no-js"><a href="#categories-pop" tabindex="3"><?php _e( 'Most Used' ); ?></a></li>
|
||||
<div id="taxonomy-<?php echo $taxonomy; ?>" class="categorydiv">
|
||||
<ul id="<?php echo $taxonomy; ?>-tabs" class="category-tabs">
|
||||
<li class="tabs"><a href="#<?php echo $taxonomy; ?>-all" tabindex="3"><?php _e( 'All Categories' ); ?></a></li>
|
||||
<li class="hide-if-no-js"><a href="#<?php echo $taxonomy; ?>-pop" tabindex="3"><?php _e( 'Most Used' ); ?></a></li>
|
||||
</ul>
|
||||
|
||||
<div id="categories-pop" class="tabs-panel" style="display: none;">
|
||||
<ul id="categorychecklist-pop" class="categorychecklist form-no-clear" >
|
||||
<?php $popular_ids = wp_popular_terms_checklist('category'); ?>
|
||||
<div id="<?php echo $taxonomy; ?>-pop" class="tabs-panel" style="display: none;">
|
||||
<ul id="<?php echo $taxonomy; ?>checklist-pop" class="categorychecklist form-no-clear" >
|
||||
<?php $popular_ids = wp_popular_terms_checklist($taxonomy); ?>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="categories-all" class="tabs-panel">
|
||||
<ul id="categorychecklist" class="list:category categorychecklist form-no-clear">
|
||||
<?php wp_category_checklist($post->ID, false, false, $popular_ids) ?>
|
||||
<div id="<?php echo $taxonomy; ?>-all" class="tabs-panel">
|
||||
<ul id="<?php echo $taxonomy; ?>checklist" class="list:<?php echo $taxonomy?> categorychecklist form-no-clear">
|
||||
<?php wp_terms_checklist($post->ID, array('taxonomy'=>$taxonomy, 'popular_cats'=> $popular_ids)) ?>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<?php if ( current_user_can('manage_categories') ) : ?>
|
||||
<div id="category-adder" class="wp-hidden-children">
|
||||
<h4><a id="category-add-toggle" href="#category-add" class="hide-if-no-js" tabindex="3"><?php _e( '+ Add New Category' ); ?></a></h4>
|
||||
<p id="category-add" class="wp-hidden-child">
|
||||
<label class="screen-reader-text" for="newcat"><?php _e( 'Add New Category' ); ?></label><input type="text" name="newcat" id="newcat" class="form-required form-input-tip" value="<?php esc_attr_e( 'New category name' ); ?>" tabindex="3" aria-required="true"/>
|
||||
<label class="screen-reader-text" for="newcat_parent"><?php _e('Parent category'); ?>:</label><?php wp_dropdown_categories( array( 'hide_empty' => 0, 'name' => 'newcat_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => __('Parent category') ) ); ?>
|
||||
<input type="button" id="category-add-sumbit" class="add:categorychecklist:category-add button" value="<?php esc_attr_e( 'Add' ); ?>" tabindex="3" />
|
||||
<?php wp_nonce_field( 'add-category', '_ajax_nonce', false ); ?>
|
||||
<span id="category-ajax-response"></span></p>
|
||||
<div id="<?php echo $taxonomy; ?>-adder" class="wp-hidden-children">
|
||||
<h4><a id="<?php echo $taxonomy; ?>-add-toggle" href="#<?php echo $taxonomy; ?>-add" class="hide-if-no-js" tabindex="3"><?php _e( '+ Add New Category' ); ?></a></h4>
|
||||
<p id="<?php echo $taxonomy; ?>-add" class="category-add wp-hidden-child">
|
||||
<label class="screen-reader-text" for="new<?php echo $taxonomy; ?>"><?php _e( 'Add New Category' ); ?></label><input type="text" name="new<?php echo $taxonomy; ?>" id="new<?php echo $taxonomy; ?>" class="form-required form-input-tip" value="<?php esc_attr_e( 'New category name' ); ?>" tabindex="3" aria-required="true"/>
|
||||
<label class="screen-reader-text" for="new<?php echo $taxonomy; ?>_parent"><?php _e('Parent category'); ?>:</label><?php wp_dropdown_categories( array( 'taxonomy' => $taxonomy, 'hide_empty' => 0, 'name' => 'new'.$taxonomy.'_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => __('Parent category'), 'tab_index' => 3 ) ); ?>
|
||||
<input type="button" id="<?php echo $taxonomy; ?>-add-submit" class="add:<?php echo $taxonomy ?>checklist:<?php echo $taxonomy ?>-add button category-add-sumbit" value="<?php esc_attr_e( 'Add' ); ?>" tabindex="3" />
|
||||
<?php wp_nonce_field( 'add-'.$taxonomy, '_ajax_nonce', false ); ?>
|
||||
<span id="<?php echo $taxonomy; ?>-ajax-response"></span>
|
||||
</p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php
|
||||
endif;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -465,9 +465,16 @@ class Walker_Category_Checklist extends Walker {
|
|||
|
||||
function start_el(&$output, $category, $depth, $args) {
|
||||
extract($args);
|
||||
if ( empty($taxonomy) )
|
||||
$taxonomy = 'category';
|
||||
|
||||
if ( $taxonomy == 'category' )
|
||||
$name = 'post_category';
|
||||
else
|
||||
$name = 'tax_input['.$taxonomy.']';
|
||||
|
||||
$class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : '';
|
||||
$output .= "\n<li id='category-$category->term_id'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="post_category[]" id="in-category-' . $category->term_id . '"' . (in_array( $category->term_id, $selected_cats ) ? ' checked="checked"' : "" ) . '/> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>';
|
||||
$output .= "\n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="'.$name.'[]" id="in-'.$taxonomy.'-' . $category->term_id . '"' . (in_array( $category->term_id, $selected_cats ) ? ' checked="checked"' : "" ) . '/> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>';
|
||||
}
|
||||
|
||||
function end_el(&$output, $category, $depth, $args) {
|
||||
|
@ -486,31 +493,59 @@ class Walker_Category_Checklist extends Walker {
|
|||
* @param unknown_type $popular_cats
|
||||
*/
|
||||
function wp_category_checklist( $post_id = 0, $descendants_and_self = 0, $selected_cats = false, $popular_cats = false, $walker = null, $checked_ontop = true ) {
|
||||
wp_terms_checklist($post_id,
|
||||
array(
|
||||
'taxonomy' => 'category',
|
||||
'descendants_and_self' => $descendants_and_self,
|
||||
'selected_cats' => $selected_cats,
|
||||
'popular_cats' => $popular_cats,
|
||||
'walker' => $walker,
|
||||
'checked_ontop' => $checked_ontop
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Taxonomy independent version of wp_category_checklist
|
||||
*
|
||||
* @param int $post_id
|
||||
* @param array $args
|
||||
*/
|
||||
function wp_terms_checklist($post_id = 0, $args = array()) {
|
||||
$defaults = array(
|
||||
'descendants_and_self' => 0,
|
||||
'selected_cats' => false,
|
||||
'popular_cats' => false,
|
||||
'walker' => null,
|
||||
'taxonomy' => 'category',
|
||||
'checked_ontop' => true
|
||||
);
|
||||
extract( wp_parse_args($args, $defaults), EXTR_SKIP );
|
||||
|
||||
if ( empty($walker) || !is_a($walker, 'Walker') )
|
||||
$walker = new Walker_Category_Checklist;
|
||||
|
||||
$descendants_and_self = (int) $descendants_and_self;
|
||||
|
||||
$args = array();
|
||||
$args = array('taxonomy' => $taxonomy);
|
||||
|
||||
if ( is_array( $selected_cats ) )
|
||||
$args['selected_cats'] = $selected_cats;
|
||||
elseif ( $post_id )
|
||||
$args['selected_cats'] = wp_get_post_categories($post_id);
|
||||
$args['selected_cats'] = wp_get_object_terms($post_id, $taxonomy, array_merge($args, array('fields' => 'ids')));
|
||||
else
|
||||
$args['selected_cats'] = array();
|
||||
|
||||
if ( is_array( $popular_cats ) )
|
||||
$args['popular_cats'] = $popular_cats;
|
||||
else
|
||||
$args['popular_cats'] = get_terms( 'category', array( 'fields' => 'ids', 'orderby' => 'count', 'order' => 'DESC', 'number' => 10, 'hierarchical' => false ) );
|
||||
$args['popular_cats'] = get_terms( $taxonomy, array( 'fields' => 'ids', 'orderby' => 'count', 'order' => 'DESC', 'number' => 10, 'hierarchical' => false ) );
|
||||
|
||||
if ( $descendants_and_self ) {
|
||||
$categories = get_categories(array('child_of' => $descendants_and_self, 'hierarchical' => 0, 'hide_empty' => 0));
|
||||
$self = get_category( $descendants_and_self );
|
||||
$categories = (array) get_terms($taxonomy, array( 'child_of' => $descendants_and_self, 'hierarchical' => 0, 'hide_empty' => 0 ) );
|
||||
$self = get_term( $descendants_and_self, $taxonomy );
|
||||
array_unshift( $categories, $self );
|
||||
} else {
|
||||
$categories = get_categories(array('get' => 'all'));
|
||||
$categories = (array) get_terms($taxonomy, array('get' => 'all'));
|
||||
}
|
||||
|
||||
if ( $checked_ontop ) {
|
||||
|
@ -547,7 +582,7 @@ function wp_popular_terms_checklist( $taxonomy, $default = 0, $number = 10, $ech
|
|||
global $post_ID;
|
||||
|
||||
if ( $post_ID )
|
||||
$checked_categories = wp_get_post_categories($post_ID);
|
||||
$checked_categories = wp_get_object_terms($post_ID, 'category', array('fields'=>'ids'));
|
||||
else
|
||||
$checked_categories = array();
|
||||
|
||||
|
@ -558,7 +593,7 @@ function wp_popular_terms_checklist( $taxonomy, $default = 0, $number = 10, $ech
|
|||
$popular_ids[] = $category->term_id;
|
||||
if ( !$echo ) // hack for AJAX use
|
||||
continue;
|
||||
$id = "popular-category-$category->term_id";
|
||||
$id = "popular-$taxonomy-$category->term_id";
|
||||
$checked = in_array( $category->term_id, $checked_categories ) ? 'checked="checked"' : '';
|
||||
?>
|
||||
|
||||
|
|
|
@ -228,7 +228,7 @@ WPRemoveThumbnail = function(){
|
|||
})(jQuery);
|
||||
|
||||
jQuery(document).ready( function($) {
|
||||
var catAddAfter, stamp, visibility, sticky = '', post = 'post' == pagenow || 'post-new' == pagenow, page = 'page' == pagenow || 'page-new' == pagenow;
|
||||
var stamp, visibility, sticky = '', post = 'post' == pagenow || 'post-new' == pagenow, page = 'page' == pagenow || 'page-new' == pagenow;
|
||||
|
||||
// postboxes
|
||||
if ( post ) {
|
||||
|
@ -253,35 +253,55 @@ jQuery(document).ready( function($) {
|
|||
}
|
||||
|
||||
// categories
|
||||
if ( $('#categorydiv').length ) {
|
||||
$('.categorydiv').each(function(){
|
||||
var this_id = $(this).attr('id'), noSyncChecks = false, syncChecks, catAddAfter, popularCats;
|
||||
var taxonomy_parts = this_id.split('-');
|
||||
taxonomy_parts.shift();
|
||||
var taxonomy = taxonomy_parts.join('-');
|
||||
var settingName = taxonomy+'_tab';
|
||||
if(taxonomy == 'category')
|
||||
settingName = 'cats';
|
||||
|
||||
// TODO: move to jQuery 1.3+, support for multiple hierarchical taxonomies, see wp-lists.dev.js
|
||||
$('a', '#category-tabs').click(function(){
|
||||
$('a', '#'+taxonomy+'-tabs').click(function(){
|
||||
var t = $(this).attr('href');
|
||||
$(this).parent().addClass('tabs').siblings('li').removeClass('tabs');
|
||||
$('#category-tabs').siblings('.tabs-panel').hide();
|
||||
$('#'+taxonomy+'-tabs').siblings('.tabs-panel').hide();
|
||||
$(t).show();
|
||||
if ( '#categories-all' == t )
|
||||
deleteUserSetting('cats');
|
||||
if ( '#'+taxonomy+'-all' == t )
|
||||
deleteUserSetting(settingName);
|
||||
else
|
||||
setUserSetting('cats','pop');
|
||||
setUserSetting(settingName,'pop');
|
||||
return false;
|
||||
});
|
||||
if ( getUserSetting('cats') )
|
||||
$('a[href="#categories-pop"]', '#category-tabs').click();
|
||||
|
||||
if ( getUserSetting(settingName) )
|
||||
$('a[href="#'+taxonomy+'-pop"]', '#'+taxonomy+'-tabs').click();
|
||||
|
||||
// Ajax Cat
|
||||
$('#newcat').one( 'focus', function() { $(this).val( '' ).removeClass( 'form-input-tip' ) } );
|
||||
$('#category-add-sumbit').click( function(){ $('#newcat').focus(); } );
|
||||
$('#new'+taxonomy).one( 'focus', function() { $(this).val( '' ).removeClass( 'form-input-tip' ) } );
|
||||
$('#'+taxonomy+'-add-submit').click(function(){$('#new'+taxonomy).focus();});
|
||||
|
||||
syncChecks = function() {
|
||||
if ( noSyncChecks )
|
||||
return;
|
||||
noSyncChecks = true;
|
||||
var th = jQuery(this), c = th.is(':checked'), id = th.val().toString();
|
||||
$('#in-'+taxonomy+'-' + id + ', #in-'+taxonomy+'-category-' + id).attr( 'checked', c );
|
||||
noSyncChecks = false;
|
||||
};
|
||||
|
||||
|
||||
|
||||
catAddBefore = function( s ) {
|
||||
if ( !$('#newcat').val() )
|
||||
if ( !$('#new'+taxonomy).val() )
|
||||
return false;
|
||||
s.data += '&' + $( ':checked', '#categorychecklist' ).serialize();
|
||||
s.data += '&' + $( ':checked', '#'+taxonomy+'checklist' ).serialize();
|
||||
return s;
|
||||
};
|
||||
|
||||
catAddAfter = function( r, s ) {
|
||||
var sup, drop = $('#newcat_parent');
|
||||
var sup, drop = $('#new'+taxonomy+'_parent');
|
||||
|
||||
if ( 'undefined' != s.parsed.responses[0] && (sup = s.parsed.responses[0].supplemental.newcat_parent) ) {
|
||||
drop.before(sup);
|
||||
|
@ -289,25 +309,24 @@ jQuery(document).ready( function($) {
|
|||
}
|
||||
};
|
||||
|
||||
$('#categorychecklist').wpList({
|
||||
$('#'+taxonomy+'checklist').wpList({
|
||||
alt: '',
|
||||
response: 'category-ajax-response',
|
||||
response: taxonomy+'-ajax-response',
|
||||
addBefore: catAddBefore,
|
||||
addAfter: catAddAfter
|
||||
});
|
||||
|
||||
$('#category-add-toggle').click( function() {
|
||||
$('#category-adder').toggleClass( 'wp-hidden-children' );
|
||||
$('a[href="#categories-all"]', '#category-tabs').click();
|
||||
$('#'+taxonomy+'-add-toggle').click( function() {
|
||||
$('#'+taxonomy+'-adder').toggleClass( 'wp-hidden-children' );
|
||||
$('a[href="#'+taxonomy+'-all"]', '#'+taxonomy+'-tabs').click();
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#categorychecklist').children('li.popular-category').add( $('#categorychecklist-pop').children() ).find(':checkbox').live( 'click', function(){
|
||||
$('#'+taxonomy+'checklist').children('li.popular-category').add( $('#'+taxonomy+'checklist-pop').children() ).find(':checkbox').live( 'click', function(){
|
||||
var t = $(this), c = t.is(':checked'), id = t.val();
|
||||
$('#in-category-' + id + ', #in-popular-category-' + id).attr( 'checked', c );
|
||||
$('#in-'+taxonomy+'-' + id + ', #in-popular-'+taxonomy+'-' + id).attr( 'checked', c );
|
||||
});
|
||||
|
||||
} // end cats
|
||||
}); // end cats
|
||||
|
||||
// Custom Fields
|
||||
if ( $('#postcustom').length ) {
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -356,7 +356,7 @@ function wp_dropdown_categories( $args = '' ) {
|
|||
if ( (int) $tab_index > 0 )
|
||||
$tab_index_attribute = " tabindex=\"$tab_index\"";
|
||||
|
||||
$categories = get_categories( $r );
|
||||
$categories = get_terms( $taxonomy, $r );
|
||||
$name = esc_attr($name);
|
||||
$class = esc_attr($class);
|
||||
|
||||
|
|
|
@ -194,6 +194,9 @@ function register_taxonomy( $taxonomy, $object_type, $args = array() ) {
|
|||
$args['name'] = $taxonomy;
|
||||
$args['object_type'] = (array) $object_type;
|
||||
$wp_taxonomies[$taxonomy] = (object) $args;
|
||||
|
||||
// register callback handling for metabox
|
||||
add_filter('wp_ajax_add-'.$taxonomy, '_wp_ajax_add_hierarchical_term');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1573,7 +1576,7 @@ function wp_set_object_terms($object_id, $terms, $taxonomy, $append = false) {
|
|||
* slug has to be globally unique for every taxonomy.
|
||||
*
|
||||
* The way this works is that if the taxonomy that the term belongs to is
|
||||
* heirarchical and has a parent, it will append that parent to the $slug.
|
||||
* hierarchical and has a parent, it will append that parent to the $slug.
|
||||
*
|
||||
* If that still doesn't return an unique slug, then it try to append a number
|
||||
* until it finds a number that is truely unique.
|
||||
|
|
Loading…
Reference in New Issue