Make WordPress Core


Ignore:
Timestamp:
01/22/2010 07:30:05 PM (17 years ago)
Author:
ryan
Message:

Create metaboxes for hierarchical taxonomies. Props prettyboymp. fixes #10122

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/admin-ajax.php

    r12797 r12798  
    201201}
    202202
     203function _wp_ajax_add_hierarchical_term() {
     204        $action = $_POST['action'];
     205        $taxonomy = get_taxonomy(substr($action, 4));
     206        check_ajax_referer( $action );
     207        if ( !current_user_can( 'manage_categories' ) )
     208                die('-1');
     209        $names = explode(',', $_POST['new'.$taxonomy->name]);
     210        $parent = isset($_POST['new'.$taxonomy->name.'_parent']) ? (int) $_POST['new'.$taxonomy->name.'_parent'] : 0;
     211        if ( 0 > $parent )
     212                $parent = 0;
     213        if ( $taxonomy->name == 'category' )
     214                $post_category = isset($_POST['post_category']) ? (array) $_POST['post_category'] : array();
     215        else
     216                $post_category = ( isset($_POST['tax_input']) && isset($_POST['tax_input'][$taxonomy->name]) ) ? (array) $_POST['tax_input'][$taxonomy->name] : array();
     217        $checked_categories = array_map( 'absint', (array) $post_category );
     218        $popular_ids = wp_popular_terms_checklist($taxonomy->name, 0, 10, false);
     219
     220        foreach ( $names as $cat_name ) {
     221                $cat_name = trim($cat_name);
     222                $category_nicename = sanitize_title($cat_name);
     223                if ( '' === $category_nicename )
     224                        continue;
     225                if ( !($cat_id = is_term($cat_name, $taxonomy->name, $parent)) ) {
     226                        $new_term = wp_insert_term($cat_name, $taxonomy->name, array('parent' => $parent));
     227                        $cat_id = $new_term['term_id'];
     228                }
     229                $checked_categories[] = $cat_id;
     230                if ( $parent ) // Do these all at once in a second
     231                        continue;
     232                $category = get_term( $cat_id, $taxonomy->name );
     233                ob_start();
     234                        wp_terms_checklist( 0, array( 'taxonomy' => $taxonomy->name, 'descendants_and_self' => $cat_id, 'selected_cats' => $checked_categories, 'popular_cats' => $popular_ids ));
     235                $data = ob_get_contents();
     236                ob_end_clean();
     237                $add = array(
     238                        'what' => $taxonomy->name,
     239                        'id' => $cat_id,
     240                        'data' => str_replace( array("\n", "\t"), '', $data),
     241                        'position' => -1
     242                );
     243        }
     244
     245        if ( $parent ) { // Foncy - replace the parent and all its children
     246                $parent = get_term( $parent, $taxonomy->name );
     247                $term_id = $parent->term_id;
     248
     249                while ( $parent->parent ) { // get the top parent
     250                        $parent = &get_term( $parent->parent, $taxonomy->name );
     251                        if ( is_wp_error( $parent ) )
     252                                break;
     253                        $term_id = $parent->term_id;
     254                }
     255
     256                ob_start();
     257                        wp_terms_checklist( 0, array('taxonomy' => $taxonomy->name, 'descendants_and_self' => $term_id, 'selected_cats' => $checked_categories, 'popular_cats' => $popular_ids));
     258                $data = ob_get_contents();
     259                ob_end_clean();
     260                $add = array(
     261                        'what' => $taxonomy->name,
     262                        'id' => $term_id,
     263                        'data' => str_replace( array("\n", "\t"), '', $data),
     264                        'position' => -1
     265                );
     266        }
     267
     268        ob_start();
     269                wp_dropdown_categories( array( 'taxonomy' => $taxonomy->name, 'hide_empty' => 0, 'name' => 'new'.$taxonomy->name.'_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => __('Parent category') ) );
     270        $sup = ob_get_contents();
     271        ob_end_clean();
     272        $add['supplemental'] = array( 'newcat_parent' => $sup );
     273
     274        $x = new WP_Ajax_Response( $add );
     275        $x->send();
     276}
     277
    203278$id = isset($_POST['id'])? (int) $_POST['id'] : 0;
    204279switch ( $action = $_POST['action'] ) :
    … …  
    410485        die( '0' );
    411486        break;
    412 case 'add-category' : // On the Fly
    413         check_ajax_referer( $action );
    414         if ( !current_user_can( 'manage_categories' ) )
    415                 die('-1');
    416         $names = explode(',', $_POST['newcat']);
    417         if ( 0 > $parent = (int) $_POST['newcat_parent'] )
    418                 $parent = 0;
    419         $post_category = isset($_POST['post_category'])? (array) $_POST['post_category'] : array();
    420         $checked_categories = array_map( 'absint', (array) $post_category );
    421         $popular_ids = wp_popular_terms_checklist('category', 0, 10, false);
    422 
    423         foreach ( $names as $cat_name ) {
    424                 $cat_name = trim($cat_name);
    425                 $category_nicename = sanitize_title($cat_name);
    426                 if ( '' === $category_nicename )
    427                         continue;
    428                 $cat_id = wp_create_category( $cat_name, $parent );
    429                 $checked_categories[] = $cat_id;
    430                 if ( $parent ) // Do these all at once in a second
    431                         continue;
    432                 $category = get_category( $cat_id );
    433                 ob_start();
    434                         wp_category_checklist( 0, $cat_id, $checked_categories, $popular_ids );
    435                 $data = ob_get_contents();
    436                 ob_end_clean();
    437                 $add = array(
    438                         'what' => 'category',
    439                         'id' => $cat_id,
    440                         'data' => str_replace( array("\n", "\t"), '', $data),
    441                         'position' => -1
    442                 );
    443         }
    444         if ( $parent ) { // Foncy - replace the parent and all its children
    445                 $parent = get_category( $parent );
    446                 $term_id = $parent->term_id;
    447 
    448                 while ( $parent->parent ) { // get the top parent
    449                         $parent = &get_category( $parent->parent );
    450                         if ( is_wp_error( $parent ) )
    451                                 break;
    452                         $term_id = $parent->term_id;
    453                 }
    454 
    455                 ob_start();
    456                         wp_category_checklist( 0, $term_id, $checked_categories, $popular_ids, null, false );
    457                 $data = ob_get_contents();
    458                 ob_end_clean();
    459                 $add = array(
    460                         'what' => 'category',
    461                         'id' => $term_id,
    462                         'data' => str_replace( array("\n", "\t"), '', $data),
    463                         'position' => -1
    464                 );
    465         }
    466 
    467         ob_start();
    468                 wp_dropdown_categories( array( 'hide_empty' => 0, 'name' => 'newcat_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => __('Parent category') ) );
    469         $sup = ob_get_contents();
    470         ob_end_clean();
    471         $add['supplemental'] = array( 'newcat_parent' => $sup );
    472 
    473         $x = new WP_Ajax_Response( $add );
    474         $x->send();
    475         break;
    476487case 'add-link-category' : // On the Fly
    477488        check_ajax_referer( $action );
    … …  
    512523        }
    513524
    514         if ( category_exists( trim( $_POST['cat_name'] ), $_POST['category_parent'] ) ) {
     525        if ( is_term( trim( $_POST['cat_name'] ), $_POST['taxonomy'], $_POST['category_parent'] ) ) {
    515526                $x = new WP_Ajax_Response( array(
    516527                        'what' => 'cat',
    … …  
    530541        }
    531542
    532         if ( !$cat || (!$cat = get_category( $cat )) )
     543        if ( !$cat || (!$cat = get_term( $cat, $_POST['taxonomy'] ) ) )
    533544                die('0');
    534545
Note: See TracChangeset for help on using the changeset viewer.