WordPress.org

Make WordPress Core

Changeset 5523


Ignore:
Timestamp:
05/23/2007 07:15:10 AM (15 years ago)
Author:
ryan
Message:

Start moving link categories to taxonomy. see #4189

Location:
trunk
Files:
4 edited

Legend:

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

    r5522 r5523  
    464464}
    465465
    466 function wp_get_link_cats($link_ID = 0) {
    467     global $wpdb;
    468 
    469     $sql = "SELECT category_id
    470         FROM $wpdb->link2cat
    471         WHERE link_id = $link_ID
    472         ORDER BY category_id";
    473 
    474     $result = $wpdb->get_col($sql);
    475 
    476     if ( !$result )
    477         $result = array();
    478 
    479     return array_unique($result);
    480 }
    481 
    482 function wp_set_link_cats($link_ID = 0, $link_categories = array()) {
    483     global $wpdb;
     466function wp_get_link_cats($link_id = 0) {
     467
     468    $cats = get_object_terms($link_id, 'link_category', 'get=ids');
     469
     470    return array_unique($cats);
     471}
     472
     473function wp_set_link_cats($link_id = 0, $link_categories = array()) {
    484474    // If $link_categories isn't already an array, make it one:
    485475    if (!is_array($link_categories) || 0 == count($link_categories))
    486476        $link_categories = array(get_option('default_link_category'));
    487477
     478    $link_categories = array_map('intval', $link_categories);
    488479    $link_categories = array_unique($link_categories);
    489480
    490     // First the old categories
    491     $old_categories = $wpdb->get_col("
    492         SELECT category_id
    493         FROM $wpdb->link2cat
    494         WHERE link_id = '$link_ID'");
    495 
    496     if (!$old_categories) {
    497         $old_categories = array();
    498     } else {
    499         $old_categories = array_unique($old_categories);
    500     }
    501 
    502     // Delete any?
    503     $delete_cats = array_diff($old_categories,$link_categories);
    504 
    505     if ($delete_cats) {
    506         foreach ($delete_cats as $del) {
    507             $del = (int) $del;
    508             $wpdb->query("
    509                 DELETE FROM $wpdb->link2cat
    510                 WHERE category_id = '$del'
    511                     AND link_id = '$link_ID'
    512                 ");
    513         }
    514     }
    515 
    516     // Add any?
    517     $add_cats = array_diff($link_categories, $old_categories);
    518 
    519     if ($add_cats) {
    520         foreach ($add_cats as $new_cat) {
    521             $new_cat = (int) $new_cat;
    522             if ( !empty($new_cat) )
    523                 $wpdb->query("
    524                     INSERT INTO $wpdb->link2cat (link_id, category_id)
    525                     VALUES ('$link_ID', '$new_cat')");
    526         }
    527     }
    528 
    529     // Update category counts.
    530     $all_affected_cats = array_unique(array_merge($link_categories, $old_categories));
    531     foreach ( $all_affected_cats as $cat_id ) {
    532         $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->link2cat, $wpdb->links WHERE $wpdb->links.link_id = $wpdb->link2cat.link_id AND category_id = '$cat_id'");
    533         $wpdb->query("UPDATE $wpdb->categories SET link_count = '$count' WHERE cat_ID = '$cat_id'");
    534         wp_cache_delete($cat_id, 'category');
    535         do_action('edit_category', $cat_id);
    536     }
    537 
     481    wp_set_object_terms($link_id, $link_categories, 'link_category');
    538482}   // wp_set_link_cats()
    539483
  • trunk/wp-admin/admin-functions.php

    r5510 r5523  
    741741}
    742742
    743 function return_link_categories_list( $parent = 0 ) {
    744     global $wpdb;
    745     return $wpdb->get_col( "SELECT cat_ID FROM $wpdb->categories WHERE category_parent = $parent AND ( type & " . TAXONOMY_CATEGORY . " != 0 ) AND ( category_count = 0 OR link_count != 0 ) ORDER BY link_count DESC" );
    746 }
    747 
    748 function get_nested_link_categories( $default = 0, $parent = 0 ) {
    749     global $post_ID, $link_id, $mode, $wpdb;
     743function dropdown_link_categories( $default = 0 ) {
     744    global $link_id;
    750745
    751746    if ( $link_id ) {
    752         $checked_categories = $wpdb->get_col( "
    753              SELECT category_id
    754              FROM $wpdb->categories, $wpdb->link2cat
    755              WHERE $wpdb->link2cat.category_id = cat_ID AND $wpdb->link2cat.link_id = '$link_id'
    756              " );
     747        $checked_categories = wp_get_link_cats($link_id);
    757748
    758749        if ( count( $checked_categories ) == 0 ) {
     
    764755    }
    765756
    766     $cats = return_link_categories_list( $parent);
    767     $result = array ();
    768 
    769     if ( is_array( $cats ) ) {
    770         foreach ( $cats as $cat) {
    771             $result[$cat]['children'] = get_nested_link_categories( $default, $cat);
    772             $result[$cat]['cat_ID'] = $cat;
    773             $result[$cat]['checked'] = in_array( $cat, $checked_categories );
    774             $result[$cat]['cat_name'] = get_the_category_by_ID( $cat);
    775         }
    776     }
    777 
    778     usort( $result, 'sort_cats' );
    779 
    780     return $result;
    781 }
    782 
    783 function dropdown_link_categories( $default = 0 ) {
    784     write_nested_categories( get_nested_link_categories( $default) );
     757    $categories = get_terms('link_category', 'orderby=count');
     758   
     759    if ( empty($categories) )
     760        return;
     761
     762    foreach ( $categories as $category ) {
     763        $cat_id = $category->term_id;
     764        $name = wp_specialchars( apply_filters('the_category', $category->name));
     765        $checked = in_array( $cat_id, $checked_categories );
     766        echo '<li id="category-', $cat_id, '"><label for="in-category-', $cat_id, '" class="selectit"><input value="', $cat_id, '" type="checkbox" name="post_category[]" id="in-category-', $cat_id, '"', ($checked ? ' checked="checked"' : "" ), '/> ', $name, "</label></li>";
     767    }
    785768}
    786769
  • trunk/wp-admin/link-manager.php

    r5435 r5523  
    160160                    $cat_names = array();
    161161                    foreach ($link->link_category as $category) {
    162                         $cat_name = get_the_category_by_ID($category);
    163                         $cat_name = wp_specialchars(apply_filters('link_category', $cat_name));
     162                        $cat = get_term($category, 'link_category');
     163                        $cat_name = wp_specialchars(apply_filters('link_category', $cat->name));
    164164                        if ( $cat_id != $category )
    165165                            $cat_name = "<a href='link-manager.php?cat_id=$category'>$cat_name</a>";
  • trunk/wp-includes/taxonomy.php

    r5522 r5523  
    183183 * @return array The requested term data.           
    184184 */
    185 function get_object_terms($object_id, $taxonomy) {
     185function get_object_terms($object_id, $taxonomy, $args = array()) {
    186186    global $wpdb;
    187187    $taxonomies = ($single_taxonomy = !is_array($taxonomy)) ? array($taxonomy) : $taxonomy;
    188188    $object_ids = ($single_object = !is_array($object_id)) ? array($object_id) : $object_id;
    189189
     190    $defaults = array('orderby' => 'name', 'order' => 'ASC', 'get' => 'everything');
     191    $args = wp_parse_args( $args, $defaults );
     192    extract($args);
     193
     194    if ( 'count' == $orderby )
     195        $orderby = 'tt.count';
     196    else if ( 'name' == $orderby )
     197        $orderby = 't.name';
     198
    190199    $taxonomies = "'" . implode("', '", $taxonomies) . "'";
    191200    $object_ids = implode(', ', $object_ids);
    192201
    193     if ( $taxonomy_data = $wpdb->get_results("SELECT t.* FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN $wpdb->term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ($taxonomies) AND tr.object_id IN ($object_ids) ORDER BY t.name") ) {
    194         if ($single_taxonomy && $single_object) {
    195             // Just one kind of taxonomy for one object.
    196             return $taxonomy_data;
    197         } else {
    198             foreach ($taxonomy_data as $data) {
    199                 if ($single_taxonomy) {
    200                     // Many objects, one taxonomy type.
    201                     $return[$data->object_id][] = $data;
    202                 } elseif ($single_object) {
    203                     // One object, many taxonomies.
    204                     $return[$data->taxonomy][] = $data;
    205                 } else {
    206                     // Many objects, many taxonomies.
    207                     $return[$data->object_id][$data->taxonomy][] = $data;
    208                 }
     202    if ( 'everything' == $get )
     203        $select_this = 't.*';
     204    else if ( 'ids' == $get )
     205        $select_this = 't.term_id';
     206
     207    $query = "SELECT $select_this FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN $wpdb->term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ($taxonomies) AND tr.object_id IN ($object_ids) ORDER BY $orderby $order";
     208
     209    if ( 'everything' == $get )
     210        $taxonomy_data = $wpdb->get_results($query);
     211    else if ( 'ids' == $get )
     212        $taxonomy_data = $wpdb->get_col($query);
     213
     214    if ( ! $taxonomy_data )
     215        return array();
     216
     217    if ($single_taxonomy && $single_object) {
     218        // Just one kind of taxonomy for one object.
     219        return $taxonomy_data;
     220    } else {
     221        foreach ($taxonomy_data as $data) {
     222            if ($single_taxonomy) {
     223                // Many objects, one taxonomy type.
     224                $return[$data->object_id][] = $data;
     225            } elseif ($single_object) {
     226                // One object, many taxonomies.
     227                $return[$data->taxonomy][] = $data;
     228            } else {
     229                // Many objects, many taxonomies.
     230                $return[$data->object_id][$data->taxonomy][] = $data;
    209231            }
    210             return $return;         
    211         }
    212     } else {
    213         return array();
     232        }
     233        return $return;         
    214234    }
    215235}
     
    224244    $defaults = array('orderby' => 'name', 'order' => 'ASC',
    225245        'hide_empty' => true, 'exclude' => '', 'include' => '',
    226         'number' => '');
     246        'number' => '', 'get' => 'everything');
    227247    $args = wp_parse_args( $args, $defaults );
    228248    $args['number'] = (int) $args['number'];
     
    279299        $number = '';
    280300
    281     $terms = $wpdb->get_results("SELECT t.*, tt.* FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ($in_taxonomies) $where ORDER BY $orderby $order $number");
     301    if ( 'everything' == $get )
     302        $select_this = 't.*, tt.*';
     303    else if ( 'ids' == $get )
     304        $select_this = 't.term_id';
     305
     306    $query = "SELECT $select_this FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ($in_taxonomies) $where ORDER BY $orderby $order $number";
     307
     308    if ( 'everything' == $get )
     309        $terms = $wpdb->get_results($query);
     310    else if ( 'ids' == $get )
     311        $terms = $wpdb->get_col($query);
    282312
    283313    if ( empty($terms) )
Note: See TracChangeset for help on using the changeset viewer.