Changeset 5726
- Timestamp:
- 06/19/2007 12:33:44 AM (17 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-admin/includes/bookmark.php
r5712 r5726 55 55 function wp_get_link_cats($link_id = 0) { 56 56 57 $cats = get_object_terms($link_id, 'link_category', 'fields=ids');57 $cats = wp_get_object_terms($link_id, 'link_category', 'fields=ids'); 58 58 59 59 return array_unique($cats); -
trunk/wp-includes/category-template.php
r5715 r5726 69 69 $categories = get_object_term_cache($id, 'category'); 70 70 if ( false === $categories ) 71 $categories = get_object_terms($id, 'category');71 $categories = wp_get_object_terms($id, 'category'); 72 72 73 73 if ( !empty($categories) ) … … 421 421 $tags = get_object_term_cache($id, 'post_tag'); 422 422 if ( false === $tags ) 423 $tags = get_object_terms($id, 'post_tag');423 $tags = wp_get_object_terms($id, 'post_tag'); 424 424 425 425 $tags = apply_filters( 'get_the_tags', $tags ); -
trunk/wp-includes/link-template.php
r5716 r5726 361 361 if ( $in_same_cat ) { 362 362 $join = " INNER JOIN $wpdb->term_relationships AS tr ON $wpdb->posts.ID = tr.object_id "; 363 $cat_array = get_object_terms($post->ID, 'category', 'fields=tt_ids');363 $cat_array = wp_get_object_terms($post->ID, 'category', 'fields=tt_ids'); 364 364 $join .= ' AND (tr.term_taxonomy_id = ' . intval($cat_array[0]); 365 365 for ( $i = 1; $i < (count($cat_array)); $i++ ) { … … 394 394 if ( $in_same_cat ) { 395 395 $join = " INNER JOIN $wpdb->term_relationships AS tr ON $wpdb->posts.ID = tr.object_id "; 396 $cat_array = get_object_terms($post->ID, 'category', 'fields=tt_ids');396 $cat_array = wp_get_object_terms($post->ID, 'category', 'fields=tt_ids'); 397 397 $join .= ' AND (tr.term_taxonomy_id = ' . intval($cat_array[0]); 398 398 for ( $i = 1; $i < (count($cat_array)); $i++ ) { -
trunk/wp-includes/post.php
r5708 r5726 441 441 $args = wp_parse_args( $args, $defaults ); 442 442 443 $cats = get_object_terms($post_id, 'category', $args);443 $cats = wp_get_object_terms($post_id, 'category', $args); 444 444 return $cats; 445 445 } … … 451 451 $args = wp_parse_args( $args, $defaults ); 452 452 453 $tags = get_object_terms($post_id, 'post_tag', $args);453 $tags = wp_get_object_terms($post_id, 'post_tag', $args); 454 454 455 455 return $tags; -
trunk/wp-includes/taxonomy.php
r5708 r5726 1 1 <?php 2 3 // 4 // Taxonomy Registration 5 // 2 6 3 7 $wp_taxonomies = array(); … … 6 10 $wp_taxonomies['link_category'] = (object) array('name' => 'link_category', 'object_type' => 'link', 'hierarchical' => false); 7 11 8 function is_taxonomy( $taxonomy ) {9 global $wp_taxonomies;10 11 return isset($wp_taxonomies[$taxonomy]);12 }13 14 function get_taxonomy( $taxonomy ) {15 global $wp_taxonomies;16 17 if ( ! is_taxonomy($taxonomy) )18 return false;19 20 return $wp_taxonomies[$taxonomy];21 }22 23 function is_taxonomy_hierarchical($taxonomy) {24 if ( ! is_taxonomy($taxonomy) )25 return false;26 27 $taxonomy = get_taxonomy($taxonomy);28 return $taxonomy->hierarchical;29 }30 31 function register_taxonomy( $taxonomy, $object_type, $args = array() ) {32 global $wp_taxonomies;33 34 $defaults = array('hierarchical' => false, 'update_count_callback' => '');35 $args = wp_parse_args($args, $defaults);36 37 $args['name'] = $taxonomy;38 $args['object_type'] = $object_type;39 $wp_taxonomies[$taxonomy] = (object) $args;40 }41 42 function wp_count_terms( $taxonomy, $args = array() ) {43 global $wpdb;44 45 $defaults = array('ignore_empty' => false);46 $args = wp_parse_args($args, $defaults);47 extract($args, EXTR_SKIP);48 49 $where = '';50 if ( $ignore_empty )51 $where = 'AND count > 0';52 53 return $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->term_taxonomy WHERE taxonomy = '$taxonomy' $where");54 }55 56 /**57 * Adds a new term to the database. Optionally marks it as an alias of an existing term.58 * @param int|string $term The term to add or update.59 * @param string $taxonomy The taxonomy to which to add the term60 * @param int|string $alias_of The id or slug of the new term's alias.61 */62 function wp_insert_term( $term, $taxonomy, $args = array() ) {63 global $wpdb;64 65 if ( ! is_taxonomy($taxonomy) )66 return new WP_Error('invalid_taxonomy', __('Invalid taxonomy'));67 68 $defaults = array( 'alias_of' => '', 'description' => '', 'parent' => 0, 'slug' => '');69 $args = wp_parse_args($args, $defaults);70 $args['name'] = $term;71 $args = sanitize_term($args, $taxonomy, 'db');72 extract($args, EXTR_SKIP);73 74 if ( empty($slug) )75 $slug = sanitize_title($name);76 else77 $slug = sanitize_title($slug);78 79 $term_group = 0;80 if ( $alias_of ) {81 $alias = $wpdb->fetch_row("SELECT term_id, term_group FROM $wpdb->terms WHERE slug = '$alias_of'");82 if ( $alias->term_group ) {83 // The alias we want is already in a group, so let's use that one.84 $term_group = $alias->term_group;85 } else {86 // The alias isn't in a group, so let's create a new one and firstly add the alias term to it.87 $term_group = $wpdb->get_var("SELECT MAX(term_group) FROM $wpdb->terms GROUP BY term_group") + 1;88 $wpdb->query("UPDATE $wpdb->terms SET term_group = $term_group WHERE term_id = $alias->term_id");89 }90 }91 92 if ( ! $term_id = is_term($slug) ) {93 $wpdb->query("INSERT INTO $wpdb->terms (name, slug, term_group) VALUES ('$name', '$slug', '$term_group')");94 $term_id = (int) $wpdb->insert_id;95 }96 97 if ( empty($slug) ) {98 $slug = sanitize_title($slug, $term_id);99 $wpdb->query("UPDATE $wpdb->terms SET slug = '$slug' WHERE term_id = '$term_id'");100 }101 102 $tt_id = $wpdb->get_var("SELECT tt.term_taxonomy_id 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.term_id = $term_id");103 104 if ( !empty($tt_id) )105 return array('term_id' => $term_id, 'term_taxonomy_id' => $tt_id);106 107 $wpdb->query("INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ('$term_id', '$taxonomy', '$description', '$parent', '0')");108 $tt_id = (int) $wpdb->insert_id;109 110 do_action("create_term", $term_id, $tt_id);111 do_action("create_$taxonomy", $term_id, $tt_id);112 113 $term_id = apply_filters('term_id_filter', $term_id, $tt_id);114 115 clean_term_cache($term_id, $taxonomy);116 117 do_action("created_term", $term_id, $tt_id);118 do_action("created_$taxonomy", $term_id, $tt_id);119 120 return array('term_id' => $term_id, 'term_taxonomy_id' => $tt_id);121 }122 123 function wp_delete_object_term_relationships( $object_id, $taxonomies ) {124 global $wpdb;125 126 $object_id = (int) $object_id;127 128 if ( !is_array($taxonomies) )129 $taxonomies = array($taxonomies);130 131 foreach ( $taxonomies as $taxonomy ) {132 $terms = get_object_terms($object_id, $taxonomy, 'fields=tt_ids');133 $in_terms = "'" . implode("', '", $terms) . "'";134 $wpdb->query("DELETE FROM $wpdb->term_relationships WHERE object_id = '$object_id' AND term_taxonomy_id IN ($in_terms)");135 136 wp_update_term_count($terms, $taxonomy);137 }138 139 // TODO clear the cache140 }141 142 /**143 * Removes a term from the database.144 */145 function wp_delete_term( $term, $taxonomy, $args = array() ) {146 global $wpdb;147 148 $term = (int) $term;149 150 if ( ! $ids = is_term($term, $taxonomy) )151 return false;152 $tt_id = $ids['term_taxonomy_id'];153 154 $defaults = array();155 $args = wp_parse_args($args, $defaults);156 extract($args, EXTR_SKIP);157 158 if ( isset($default) ) {159 $default = (int) $default;160 if ( ! is_term($default, $taxonomy) )161 unset($default);162 }163 164 // Update children to point to new parent165 if ( is_taxonomy_hierarchical($taxonomy) ) {166 $term_obj = get_term($term, $taxonomy);167 $parent = $term_obj->parent;168 169 $wpdb->query("UPDATE $wpdb->term_taxonomy SET parent = '$parent' WHERE parent = '$term_obj->term_id' AND taxonomy = '$taxonomy'");170 }171 172 $objects = $wpdb->get_col("SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id = '$tt_id'");173 174 foreach ( (array) $objects as $object ) {175 $terms = get_object_terms($object, $taxonomy, 'fields=ids');176 if ( 1 == count($terms) && isset($default) )177 $terms = array($default);178 else179 $terms = array_diff($terms, array($term));180 wp_set_object_terms($object, $terms, $taxonomy);181 }182 183 $wpdb->query("DELETE FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = '$tt_id'");184 185 // Delete the term if no taxonomies use it.186 if ( !$wpdb->get_var("SELECT COUNT(*) FROM $wpdb->term_taxonomy WHERE term_id = '$term'") )187 $wpdb->query("DELETE FROM $wpdb->terms WHERE term_id = '$term'");188 189 clean_term_cache($term, $taxonomy);190 191 do_action("delete_$taxonomy", $term, $tt_id);192 193 return true;194 }195 196 function wp_update_term( $term, $taxonomy, $args = array() ) {197 global $wpdb;198 199 if ( ! is_taxonomy($taxonomy) )200 return new WP_Error('invalid_taxonomy', __('Invalid taxonomy'));201 202 $term_id = (int) $term;203 204 // First, get all of the original args205 $term = get_term ($term_id, $taxonomy, ARRAY_A);206 207 $term = sanitize_term($term, $taxonomy, 'db');208 209 // Escape data pulled from DB.210 $term = add_magic_quotes($term);211 212 // Merge old and new args with new args overwriting old ones.213 $args = array_merge($term, $args);214 215 $defaults = array( 'alias_of' => '', 'description' => '', 'parent' => 0, 'slug' => '');216 $args = wp_parse_args($args, $defaults);217 extract($args, EXTR_SKIP);218 219 if ( empty($slug) )220 $slug = sanitize_title($name);221 else222 $slug = sanitize_title($slug);223 224 if ( $alias_of ) {225 $alias = $wpdb->fetch_row("SELECT term_id, term_group FROM $wpdb->terms WHERE slug = '$alias_of'");226 if ( $alias->term_group ) {227 // The alias we want is already in a group, so let's use that one.228 $term_group = $alias->term_group;229 } else {230 // The alias isn't in a group, so let's create a new one and firstly add the alias term to it.231 $term_group = $wpdb->get_var("SELECT MAX(term_group) FROM $wpdb->terms GROUP BY term_group") + 1;232 $wpdb->query("UPDATE $wpdb->terms SET term_group = $term_group WHERE term_id = $alias->term_id");233 }234 }235 236 $wpdb->query("UPDATE $wpdb->terms SET name = '$name', slug = '$slug', term_group = '$term_group' WHERE term_id = '$term_id'");237 238 if ( empty($slug) ) {239 $slug = sanitize_title($name, $term_id);240 $wpdb->query("UPDATE $wpdb->terms SET slug = '$slug' WHERE term_id = '$term_id'");241 }242 243 $tt_id = $wpdb->get_var("SELECT tt.term_taxonomy_id 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.term_id = $term_id");244 245 $wpdb->query("UPDATE $wpdb->term_taxonomy SET term_id = '$term_id', taxonomy = '$taxonomy', description = '$description', parent = '$parent' WHERE term_taxonomy_id = '$tt_id'");246 247 do_action("edit_term", $term_id, $tt_id);248 do_action("edit_$taxonomy", $term_id, $tt_id);249 250 $term_id = apply_filters('term_id_filter', $term_id, $tt_id);251 252 clean_term_cache($term_id, $taxonomy);253 254 do_action("edited_term", $term_id, $tt_id);255 do_action("edited_$taxonomy", $term_id, $tt_id);256 257 return array('term_id' => $term_id, 'term_taxonomy_id' => $tt_id);258 }259 260 function wp_update_term_count( $terms, $taxonomy ) {261 global $wpdb;262 263 if ( empty($terms) )264 return false;265 266 if ( !is_array($terms) )267 $terms = array($terms);268 269 $terms = array_map('intval', $terms);270 271 $taxonomy = get_taxonomy($taxonomy);272 if ( isset($taxonomy->update_count_callback) )273 return call_user_func($taxonomy->update_count_callback, $terms);274 275 // Default count updater276 $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->term_relationships WHERE term_taxonomy_id = '$term'");277 $wpdb->query("UPDATE $wpdb->term_taxonomy SET count = '$count' WHERE term_taxonomy_id = '$term'");278 279 return true;280 }281 282 /**283 * Returns the index of a defined term, or 0 (false) if the term doesn't exist.284 */285 function is_term($term, $taxonomy = '') {286 global $wpdb;287 288 if ( is_int($term) ) {289 $where = "t.term_id = '$term'";290 } else {291 if ( ! $term = sanitize_title($term) )292 return 0;293 $where = "t.slug = '$term'";294 }295 296 $term_id = $wpdb->get_var("SELECT term_id FROM $wpdb->terms as t WHERE $where");297 298 if ( empty($taxonomy) || empty($term_id) )299 return $term_id;300 301 return $wpdb->get_row("SELECT tt.term_id, tt.term_taxonomy_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_id = t.term_id WHERE $where AND tt.taxonomy = '$taxonomy'", ARRAY_A);302 }303 304 /**305 * Given an array of terms, returns those that are defined term slugs. Ignores integers.306 * @param array $terms The term slugs to check for a definition.307 */308 function get_defined_terms($terms) {309 global $wpdb;310 311 foreach ( $terms as $term ) {312 if ( !is_int($term) )313 $searches[] = $term;314 }315 316 $terms = "'" . implode("', '", $searches) . "'";317 return $wpdb->get_col("SELECT slug FROM $wpdb->terms WHERE slug IN ($terms)");318 }319 320 /**321 * Relates an object (post, link etc) to a term and taxonomy type. Creates the term and taxonomy322 * relationship if it doesn't already exist. Creates a term if it doesn't exist (using the slug).323 * @param int $object_id The object to relate to.324 * @param array|int|string $term The slug or id of the term.325 * @param array|string $taxonomy The context in which to relate the term to the object.326 */327 function wp_set_object_terms($object_id, $terms, $taxonomy, $append = false) {328 global $wpdb;329 330 $object_id = (int) $object_id;331 332 if ( ! is_taxonomy($taxonomy) )333 return false;334 335 if ( !is_array($terms) )336 $terms = array($terms);337 338 if ( ! $append )339 $old_terms = get_object_terms($object_id, $taxonomy, 'fields=tt_ids');340 341 $tt_ids = array();342 $term_ids = array();343 344 foreach ($terms as $term) {345 if ( !$id = is_term($term, $taxonomy) )346 $id = wp_insert_term($term, $taxonomy);347 $term_ids[] = $id['term_id'];348 $id = $id['term_taxonomy_id'];349 $tt_ids[] = $id;350 351 if ( $wpdb->get_var("SELECT term_taxonomy_id FROM $wpdb->term_relationships WHERE object_id = '$object_id' AND term_taxonomy_id = '$id'") )352 continue;353 $wpdb->query("INSERT INTO $wpdb->term_relationships (object_id, term_taxonomy_id) VALUES ('$object_id', '$id')");354 }355 356 wp_update_term_count($tt_ids, $taxonomy);357 358 if ( ! $append ) {359 $delete_terms = array_diff($old_terms, $tt_ids);360 if ( $delete_terms ) {361 $delete_terms = "'" . implode("', '", $delete_terms) . "'";362 $wpdb->query("DELETE FROM $wpdb->term_relationships WHERE term_taxonomy_id IN ($delete_terms)");363 $wpdb->query("UPDATE $wpdb->term_taxonomy SET count = count - 1 WHERE term_taxonomy_id IN ($delete_terms)");364 wp_update_term_count($delete_terms, $taxonomy);365 }366 }367 368 // TODO clean old_terms. Need term_id instead of tt_id369 clean_term_cache($term_ids, $taxonomy);370 371 return $tt_ids;372 }373 374 function get_objects_in_term( $terms, $taxonomies, $args = array() ) {375 global $wpdb;376 377 if ( !is_array( $terms) )378 $terms = array($terms);379 380 if ( !is_array($taxonomies) )381 $taxonomies = array($taxonomies);382 383 $defaults = array('order' => 'ASC');384 $args = wp_parse_args( $args, $defaults );385 extract($args, EXTR_SKIP);386 387 $terms = array_map('intval', $terms);388 389 $taxonomies = "'" . implode("', '", $taxonomies) . "'";390 $terms = "'" . implode("', '", $terms) . "'";391 392 $object_ids = $wpdb->get_col("SELECT tr.object_id FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ($taxonomies) AND tt.term_id IN ($terms) ORDER BY tr.object_id $order");393 394 if ( ! $object_ids )395 return array();396 397 return $object_ids;398 }399 400 12 function get_object_taxonomies($object_type) { 401 13 global $wp_taxonomies; … … 410 22 } 411 23 412 /** 413 * Returns the terms associated with the given object(s), in the supplied taxonomies. 414 * @param int|array $object_id The id of the object(s)) to retrieve for. 415 * @param string|array $taxonomies The taxonomies to retrieve terms from. 416 * @return array The requested term data. 417 */ 418 function get_object_terms($object_ids, $taxonomies, $args = array()) { 419 global $wpdb; 24 function get_taxonomy( $taxonomy ) { 25 global $wp_taxonomies; 26 27 if ( ! is_taxonomy($taxonomy) ) 28 return false; 29 30 return $wp_taxonomies[$taxonomy]; 31 } 32 33 function is_taxonomy( $taxonomy ) { 34 global $wp_taxonomies; 35 36 return isset($wp_taxonomies[$taxonomy]); 37 } 38 39 function is_taxonomy_hierarchical($taxonomy) { 40 if ( ! is_taxonomy($taxonomy) ) 41 return false; 42 43 $taxonomy = get_taxonomy($taxonomy); 44 return $taxonomy->hierarchical; 45 } 46 47 function register_taxonomy( $taxonomy, $object_type, $args = array() ) { 48 global $wp_taxonomies; 49 50 $defaults = array('hierarchical' => false, 'update_count_callback' => ''); 51 $args = wp_parse_args($args, $defaults); 52 53 $args['name'] = $taxonomy; 54 $args['object_type'] = $object_type; 55 $wp_taxonomies[$taxonomy] = (object) $args; 56 } 57 58 // 59 // Term API 60 // 61 62 function get_objects_in_term( $terms, $taxonomies, $args = array() ) { 63 global $wpdb; 64 65 if ( !is_array( $terms) ) 66 $terms = array($terms); 420 67 421 68 if ( !is_array($taxonomies) ) 422 69 $taxonomies = array($taxonomies); 423 70 424 if ( !is_array($object_ids) ) 425 $object_ids = array($object_ids); 426 $object_ids = array_map('intval', $object_ids); 427 428 $defaults = array('orderby' => 'name', 'order' => 'ASC', 'fields' => 'all'); 71 foreach ( $taxonomies as $taxonomy ) { 72 if ( ! is_taxonomy($taxonomy) ) 73 return new WP_Error('invalid_taxonomy', __('Invalid Taxonomy')); 74 } 75 76 $defaults = array('order' => 'ASC'); 429 77 $args = wp_parse_args( $args, $defaults ); 430 78 extract($args, EXTR_SKIP); 431 79 432 if ( 'count' == $orderby ) 433 $orderby = 'tt.count'; 434 else if ( 'name' == $orderby ) 435 $orderby = 't.name'; 80 $terms = array_map('intval', $terms); 436 81 437 82 $taxonomies = "'" . implode("', '", $taxonomies) . "'"; 438 $object_ids = implode(', ', $object_ids); 439 440 if ( 'all' == $fields ) 441 $select_this = 't.*, tt.*'; 442 else if ( 'ids' == $fields ) 443 $select_this = 't.term_id'; 444 else if ( 'all_with_object_id' == $fields ) 445 $select_this = 't.*, tt.*, tr.object_id'; 446 447 $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"; 448 449 if ( 'all' == $fields || 'all_with_object_id' == $fields ) { 450 $terms = $wpdb->get_results($query); 451 update_term_cache($terms); 452 } else if ( 'ids' == $fields ) { 453 $terms = $wpdb->get_col($query); 454 } else if ( 'tt_ids' == $fields ) { 455 $terms = $wpdb->get_col("SELECT tr.term_taxonomy_id FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tr.object_id IN ($object_ids) AND tt.taxonomy IN ($taxonomies) ORDER BY tr.term_taxonomy_id $order"); 456 } 457 458 if ( ! $terms ) 83 $terms = "'" . implode("', '", $terms) . "'"; 84 85 $object_ids = $wpdb->get_col("SELECT tr.object_id FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ($taxonomies) AND tt.term_id IN ($terms) ORDER BY tr.object_id $order"); 86 87 if ( ! $object_ids ) 459 88 return array(); 460 89 461 return $terms; 90 return $object_ids; 91 } 92 93 function &get_term(&$term, $taxonomy, $output = OBJECT) { 94 global $wpdb; 95 96 if ( empty($term) ) 97 return null; 98 99 if ( ! is_taxonomy($taxonomy) ) 100 return new WP_Error('invalid_taxonomy', __('Invalid Taxonomy')); 101 102 if ( is_object($term) ) { 103 wp_cache_add($term->term_id, $term, $taxonomy); 104 $_term = $term; 105 } else { 106 $term = (int) $term; 107 if ( ! $_term = wp_cache_get($term, $taxonomy) ) { 108 $_term = $wpdb->get_row("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 = '$taxonomy' AND t.term_id = '$term' LIMIT 1"); 109 wp_cache_add($term, $_term, $taxonomy); 110 } 111 } 112 113 $_term = apply_filters('get_term', $_term, $taxonomy); 114 $_term = apply_filters("get_$taxonomy", $_term, $taxonomy); 115 116 if ( $output == OBJECT ) { 117 return $_term; 118 } elseif ( $output == ARRAY_A ) { 119 return get_object_vars($_term); 120 } elseif ( $output == ARRAY_N ) { 121 return array_values(get_object_vars($_term)); 122 } else { 123 return $_term; 124 } 125 } 126 127 function get_term_by($field, $value, $taxonomy, $output = OBJECT) { 128 global $wpdb; 129 130 if ( ! is_taxonomy($taxonomy) ) 131 return false; 132 133 if ( 'slug' == $field ) { 134 $field = 't.slug'; 135 $value = sanitize_title($field); 136 if ( empty($value) ) 137 return false; 138 } else if ( 'name' == $field ) { 139 // Assume already escaped 140 $field = 't.name'; 141 } else { 142 $field = 't.term_id'; 143 $value = (int) $value; 144 } 145 146 $term = $wpdb->get_row("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 = '$taxonomy' AND $field = '$value' LIMIT 1"); 147 if ( !$term ) 148 return false; 149 150 wp_cache_add($term->term_id, $term, $taxonomy); 151 152 if ( $output == OBJECT ) { 153 return $term; 154 } elseif ( $output == ARRAY_A ) { 155 return get_object_vars($term); 156 } elseif ( $output == ARRAY_N ) { 157 return array_values(get_object_vars($term)); 158 } else { 159 return $term; 160 } 161 } 162 163 function get_term_children( $term, $taxonomy ) { 164 if ( ! is_taxonomy($taxonomy) ) 165 return new WP_Error('invalid_taxonomy', __('Invalid Taxonomy')); 166 167 $terms = _get_term_hierarchy($taxonomy); 168 169 if ( ! isset($terms[$term]) ) 170 return array(); 171 172 $children = $terms[$term]; 173 174 foreach ( $terms[$term] as $child ) { 175 if ( isset($terms[$child]) ) 176 $children = array_merge($children, get_term_children($child, $taxonomy)); 177 } 178 179 return $children; 180 } 181 182 function get_term_field( $field, $term, $taxonomy, $context = 'display' ) { 183 $term = (int) $term; 184 $term = get_term( $term, $taxonomy ); 185 186 if ( is_wp_error($term) ) 187 return $term; 188 189 if ( !is_object($term) ) 190 return ''; 191 192 if ( !isset($term->$field) ) 193 return ''; 194 195 return sanitize_term_field($field, $term->$field, $term->term_id, $taxonomy, $context); 196 } 197 198 function get_term_to_edit( $id, $taxonomy ) { 199 $term = get_term( $id, $taxonomy ); 200 201 if ( is_wp_error($term) ) 202 return $term; 203 204 if ( !is_object($term) ) 205 return ''; 206 207 return sanitize_term($term, $taxonomy, 'edit'); 462 208 } 463 209 … … 469 215 $single_taxonomy = true; 470 216 $taxonomies = array($taxonomies); 217 } 218 219 foreach ( $taxonomies as $taxonomy ) { 220 if ( ! is_taxonomy($taxonomy) ) 221 return new WP_Error('invalid_taxonomy', __('Invalid Taxonomy')); 471 222 } 472 223 … … 624 375 } 625 376 626 function &get_term(&$term, $taxonomy, $output = OBJECT) { 627 global $wpdb; 628 629 if ( empty($term) ) 630 return null; 631 632 if ( is_object($term) ) { 633 wp_cache_add($term->term_id, $term, $taxonomy); 634 $_term = $term; 377 /** 378 * Returns the index of a defined term, or 0 (false) if the term doesn't exist. 379 */ 380 function is_term($term, $taxonomy = '') { 381 global $wpdb; 382 383 if ( is_int($term) ) { 384 $where = "t.term_id = '$term'"; 635 385 } else { 636 $term = (int) $term; 637 if ( ! $_term = wp_cache_get($term, $taxonomy) ) { 638 $_term = $wpdb->get_row("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 = '$taxonomy' AND t.term_id = '$term' LIMIT 1"); 639 wp_cache_add($term, $_term, $taxonomy); 640 } 641 } 642 643 $_term = apply_filters('get_term', $_term, $taxonomy); 644 $_term = apply_filters("get_$taxonomy", $_term, $taxonomy); 645 646 if ( $output == OBJECT ) { 647 return $_term; 648 } elseif ( $output == ARRAY_A ) { 649 return get_object_vars($_term); 650 } elseif ( $output == ARRAY_N ) { 651 return array_values(get_object_vars($_term)); 652 } else { 653 return $_term; 654 } 655 } 656 657 function get_term_by($field, $value, $taxonomy, $output = OBJECT) { 658 global $wpdb; 659 660 if ( ! is_taxonomy($taxonomy) ) 661 return false; 662 663 if ( 'slug' == $field ) { 664 $field = 't.slug'; 665 $value = sanitize_title($field); 666 if ( empty($value) ) 667 return false; 668 } else if ( 'name' == $field ) { 669 // Assume already escaped 670 $field = 't.name'; 671 } else { 672 $field = 't.term_id'; 673 $value = (int) $value; 674 } 675 676 $term = $wpdb->get_row("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 = '$taxonomy' AND $field = '$value' LIMIT 1"); 677 if ( !$term ) 678 return false; 679 680 wp_cache_add($term->term_id, $term, $taxonomy); 681 682 if ( $output == OBJECT ) { 683 return $term; 684 } elseif ( $output == ARRAY_A ) { 685 return get_object_vars($term); 686 } elseif ( $output == ARRAY_N ) { 687 return array_values(get_object_vars($term)); 688 } else { 689 return $term; 690 } 691 } 692 693 function get_term_children( $term, $taxonomy ) { 694 $terms = _get_term_hierarchy($taxonomy); 695 696 if ( ! isset($terms[$term]) ) 697 return array(); 698 699 $children = $terms[$term]; 700 701 foreach ( $terms[$term] as $child ) { 702 if ( isset($terms[$child]) ) 703 $children = array_merge($children, get_term_children($child, $taxonomy)); 704 } 705 706 return $children; 707 } 708 709 function get_term_field( $field, $term, $taxonomy, $context = 'display' ) { 710 $term = (int) $term; 711 $term = get_term( $term, $taxonomy ); 712 713 if ( !is_object($term) ) 714 return ''; 715 716 if ( !isset($term->$field) ) 717 return ''; 718 719 return sanitize_term_field($field, $term->$field, $term->term_id, $taxonomy, $context); 720 } 721 722 function get_term_to_edit( $id, $taxonomy ) { 723 $term = get_term( $id, $taxonomy ); 724 725 if ( !is_object($term) ) 726 return ''; 727 728 return sanitize_term($term, $taxonomy, 'edit'); 386 if ( ! $term = sanitize_title($term) ) 387 return 0; 388 $where = "t.slug = '$term'"; 389 } 390 391 $term_id = $wpdb->get_var("SELECT term_id FROM $wpdb->terms as t WHERE $where"); 392 393 if ( empty($taxonomy) || empty($term_id) ) 394 return $term_id; 395 396 return $wpdb->get_row("SELECT tt.term_id, tt.term_taxonomy_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_id = t.term_id WHERE $where AND tt.taxonomy = '$taxonomy'", ARRAY_A); 729 397 } 730 398 … … 777 445 } 778 446 447 function wp_count_terms( $taxonomy, $args = array() ) { 448 global $wpdb; 449 450 $defaults = array('ignore_empty' => false); 451 $args = wp_parse_args($args, $defaults); 452 extract($args, EXTR_SKIP); 453 454 $where = ''; 455 if ( $ignore_empty ) 456 $where = 'AND count > 0'; 457 458 return $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->term_taxonomy WHERE taxonomy = '$taxonomy' $where"); 459 } 460 461 function wp_delete_object_term_relationships( $object_id, $taxonomies ) { 462 global $wpdb; 463 464 $object_id = (int) $object_id; 465 466 if ( !is_array($taxonomies) ) 467 $taxonomies = array($taxonomies); 468 469 foreach ( $taxonomies as $taxonomy ) { 470 $terms = get_object_terms($object_id, $taxonomy, 'fields=tt_ids'); 471 $in_terms = "'" . implode("', '", $terms) . "'"; 472 $wpdb->query("DELETE FROM $wpdb->term_relationships WHERE object_id = '$object_id' AND term_taxonomy_id IN ($in_terms)"); 473 474 wp_update_term_count($terms, $taxonomy); 475 } 476 477 // TODO clear the cache 478 } 479 480 /** 481 * Removes a term from the database. 482 */ 483 function wp_delete_term( $term, $taxonomy, $args = array() ) { 484 global $wpdb; 485 486 $term = (int) $term; 487 488 if ( ! $ids = is_term($term, $taxonomy) ) 489 return false; 490 $tt_id = $ids['term_taxonomy_id']; 491 492 $defaults = array(); 493 $args = wp_parse_args($args, $defaults); 494 extract($args, EXTR_SKIP); 495 496 if ( isset($default) ) { 497 $default = (int) $default; 498 if ( ! is_term($default, $taxonomy) ) 499 unset($default); 500 } 501 502 // Update children to point to new parent 503 if ( is_taxonomy_hierarchical($taxonomy) ) { 504 $term_obj = get_term($term, $taxonomy); 505 $parent = $term_obj->parent; 506 507 $wpdb->query("UPDATE $wpdb->term_taxonomy SET parent = '$parent' WHERE parent = '$term_obj->term_id' AND taxonomy = '$taxonomy'"); 508 } 509 510 $objects = $wpdb->get_col("SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id = '$tt_id'"); 511 512 foreach ( (array) $objects as $object ) { 513 $terms = get_object_terms($object, $taxonomy, 'fields=ids'); 514 if ( 1 == count($terms) && isset($default) ) 515 $terms = array($default); 516 else 517 $terms = array_diff($terms, array($term)); 518 wp_set_object_terms($object, $terms, $taxonomy); 519 } 520 521 $wpdb->query("DELETE FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = '$tt_id'"); 522 523 // Delete the term if no taxonomies use it. 524 if ( !$wpdb->get_var("SELECT COUNT(*) FROM $wpdb->term_taxonomy WHERE term_id = '$term'") ) 525 $wpdb->query("DELETE FROM $wpdb->terms WHERE term_id = '$term'"); 526 527 clean_term_cache($term, $taxonomy); 528 529 do_action("delete_$taxonomy", $term, $tt_id); 530 531 return true; 532 } 533 534 /** 535 * Returns the terms associated with the given object(s), in the supplied taxonomies. 536 * @param int|array $object_id The id of the object(s)) to retrieve for. 537 * @param string|array $taxonomies The taxonomies to retrieve terms from. 538 * @return array The requested term data. 539 */ 540 function wp_get_object_terms($object_ids, $taxonomies, $args = array()) { 541 global $wpdb; 542 543 if ( !is_array($taxonomies) ) 544 $taxonomies = array($taxonomies); 545 546 foreach ( $taxonomies as $taxonomy ) { 547 if ( ! is_taxonomy($taxonomy) ) 548 return new WP_Error('invalid_taxonomy', __('Invalid Taxonomy')); 549 } 550 551 if ( !is_array($object_ids) ) 552 $object_ids = array($object_ids); 553 $object_ids = array_map('intval', $object_ids); 554 555 $defaults = array('orderby' => 'name', 'order' => 'ASC', 'fields' => 'all'); 556 $args = wp_parse_args( $args, $defaults ); 557 extract($args, EXTR_SKIP); 558 559 if ( 'count' == $orderby ) 560 $orderby = 'tt.count'; 561 else if ( 'name' == $orderby ) 562 $orderby = 't.name'; 563 564 $taxonomies = "'" . implode("', '", $taxonomies) . "'"; 565 $object_ids = implode(', ', $object_ids); 566 567 if ( 'all' == $fields ) 568 $select_this = 't.*, tt.*'; 569 else if ( 'ids' == $fields ) 570 $select_this = 't.term_id'; 571 else if ( 'all_with_object_id' == $fields ) 572 $select_this = 't.*, tt.*, tr.object_id'; 573 574 $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"; 575 576 if ( 'all' == $fields || 'all_with_object_id' == $fields ) { 577 $terms = $wpdb->get_results($query); 578 update_term_cache($terms); 579 } else if ( 'ids' == $fields ) { 580 $terms = $wpdb->get_col($query); 581 } else if ( 'tt_ids' == $fields ) { 582 $terms = $wpdb->get_col("SELECT tr.term_taxonomy_id FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tr.object_id IN ($object_ids) AND tt.taxonomy IN ($taxonomies) ORDER BY tr.term_taxonomy_id $order"); 583 } 584 585 if ( ! $terms ) 586 return array(); 587 588 return $terms; 589 } 590 591 /** 592 * Adds a new term to the database. Optionally marks it as an alias of an existing term. 593 * @param int|string $term The term to add or update. 594 * @param string $taxonomy The taxonomy to which to add the term 595 * @param int|string $alias_of The id or slug of the new term's alias. 596 */ 597 function wp_insert_term( $term, $taxonomy, $args = array() ) { 598 global $wpdb; 599 600 if ( ! is_taxonomy($taxonomy) ) 601 return new WP_Error('invalid_taxonomy', __('Invalid taxonomy')); 602 603 $defaults = array( 'alias_of' => '', 'description' => '', 'parent' => 0, 'slug' => ''); 604 $args = wp_parse_args($args, $defaults); 605 $args['name'] = $term; 606 $args = sanitize_term($args, $taxonomy, 'db'); 607 extract($args, EXTR_SKIP); 608 609 if ( empty($slug) ) 610 $slug = sanitize_title($name); 611 else 612 $slug = sanitize_title($slug); 613 614 $term_group = 0; 615 if ( $alias_of ) { 616 $alias = $wpdb->fetch_row("SELECT term_id, term_group FROM $wpdb->terms WHERE slug = '$alias_of'"); 617 if ( $alias->term_group ) { 618 // The alias we want is already in a group, so let's use that one. 619 $term_group = $alias->term_group; 620 } else { 621 // The alias isn't in a group, so let's create a new one and firstly add the alias term to it. 622 $term_group = $wpdb->get_var("SELECT MAX(term_group) FROM $wpdb->terms GROUP BY term_group") + 1; 623 $wpdb->query("UPDATE $wpdb->terms SET term_group = $term_group WHERE term_id = $alias->term_id"); 624 } 625 } 626 627 if ( ! $term_id = is_term($slug) ) { 628 $wpdb->query("INSERT INTO $wpdb->terms (name, slug, term_group) VALUES ('$name', '$slug', '$term_group')"); 629 $term_id = (int) $wpdb->insert_id; 630 } 631 632 if ( empty($slug) ) { 633 $slug = sanitize_title($slug, $term_id); 634 $wpdb->query("UPDATE $wpdb->terms SET slug = '$slug' WHERE term_id = '$term_id'"); 635 } 636 637 $tt_id = $wpdb->get_var("SELECT tt.term_taxonomy_id 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.term_id = $term_id"); 638 639 if ( !empty($tt_id) ) 640 return array('term_id' => $term_id, 'term_taxonomy_id' => $tt_id); 641 642 $wpdb->query("INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ('$term_id', '$taxonomy', '$description', '$parent', '0')"); 643 $tt_id = (int) $wpdb->insert_id; 644 645 do_action("create_term", $term_id, $tt_id); 646 do_action("create_$taxonomy", $term_id, $tt_id); 647 648 $term_id = apply_filters('term_id_filter', $term_id, $tt_id); 649 650 clean_term_cache($term_id, $taxonomy); 651 652 do_action("created_term", $term_id, $tt_id); 653 do_action("created_$taxonomy", $term_id, $tt_id); 654 655 return array('term_id' => $term_id, 'term_taxonomy_id' => $tt_id); 656 } 657 658 /** 659 * Relates an object (post, link etc) to a term and taxonomy type. Creates the term and taxonomy 660 * relationship if it doesn't already exist. Creates a term if it doesn't exist (using the slug). 661 * @param int $object_id The object to relate to. 662 * @param array|int|string $term The slug or id of the term. 663 * @param array|string $taxonomy The context in which to relate the term to the object. 664 */ 665 function wp_set_object_terms($object_id, $terms, $taxonomy, $append = false) { 666 global $wpdb; 667 668 $object_id = (int) $object_id; 669 670 if ( ! is_taxonomy($taxonomy) ) 671 return new WP_Error('invalid_taxonomy', __('Invalid Taxonomy')); 672 673 if ( !is_array($terms) ) 674 $terms = array($terms); 675 676 if ( ! $append ) 677 $old_terms = wp_get_object_terms($object_id, $taxonomy, 'fields=tt_ids'); 678 679 $tt_ids = array(); 680 $term_ids = array(); 681 682 foreach ($terms as $term) { 683 if ( !$id = is_term($term, $taxonomy) ) 684 $id = wp_insert_term($term, $taxonomy); 685 $term_ids[] = $id['term_id']; 686 $id = $id['term_taxonomy_id']; 687 $tt_ids[] = $id; 688 689 if ( $wpdb->get_var("SELECT term_taxonomy_id FROM $wpdb->term_relationships WHERE object_id = '$object_id' AND term_taxonomy_id = '$id'") ) 690 continue; 691 $wpdb->query("INSERT INTO $wpdb->term_relationships (object_id, term_taxonomy_id) VALUES ('$object_id', '$id')"); 692 } 693 694 wp_update_term_count($tt_ids, $taxonomy); 695 696 if ( ! $append ) { 697 $delete_terms = array_diff($old_terms, $tt_ids); 698 if ( $delete_terms ) { 699 $delete_terms = "'" . implode("', '", $delete_terms) . "'"; 700 $wpdb->query("DELETE FROM $wpdb->term_relationships WHERE term_taxonomy_id IN ($delete_terms)"); 701 $wpdb->query("UPDATE $wpdb->term_taxonomy SET count = count - 1 WHERE term_taxonomy_id IN ($delete_terms)"); 702 wp_update_term_count($delete_terms, $taxonomy); 703 } 704 } 705 706 // TODO clean old_terms. Need term_id instead of tt_id 707 clean_term_cache($term_ids, $taxonomy); 708 709 return $tt_ids; 710 } 711 712 function wp_update_term( $term, $taxonomy, $args = array() ) { 713 global $wpdb; 714 715 if ( ! is_taxonomy($taxonomy) ) 716 return new WP_Error('invalid_taxonomy', __('Invalid taxonomy')); 717 718 $term_id = (int) $term; 719 720 // First, get all of the original args 721 $term = get_term ($term_id, $taxonomy, ARRAY_A); 722 723 $term = sanitize_term($term, $taxonomy, 'db'); 724 725 // Escape data pulled from DB. 726 $term = add_magic_quotes($term); 727 728 // Merge old and new args with new args overwriting old ones. 729 $args = array_merge($term, $args); 730 731 $defaults = array( 'alias_of' => '', 'description' => '', 'parent' => 0, 'slug' => ''); 732 $args = wp_parse_args($args, $defaults); 733 extract($args, EXTR_SKIP); 734 735 if ( empty($slug) ) 736 $slug = sanitize_title($name); 737 else 738 $slug = sanitize_title($slug); 739 740 if ( $alias_of ) { 741 $alias = $wpdb->fetch_row("SELECT term_id, term_group FROM $wpdb->terms WHERE slug = '$alias_of'"); 742 if ( $alias->term_group ) { 743 // The alias we want is already in a group, so let's use that one. 744 $term_group = $alias->term_group; 745 } else { 746 // The alias isn't in a group, so let's create a new one and firstly add the alias term to it. 747 $term_group = $wpdb->get_var("SELECT MAX(term_group) FROM $wpdb->terms GROUP BY term_group") + 1; 748 $wpdb->query("UPDATE $wpdb->terms SET term_group = $term_group WHERE term_id = $alias->term_id"); 749 } 750 } 751 752 $wpdb->query("UPDATE $wpdb->terms SET name = '$name', slug = '$slug', term_group = '$term_group' WHERE term_id = '$term_id'"); 753 754 if ( empty($slug) ) { 755 $slug = sanitize_title($name, $term_id); 756 $wpdb->query("UPDATE $wpdb->terms SET slug = '$slug' WHERE term_id = '$term_id'"); 757 } 758 759 $tt_id = $wpdb->get_var("SELECT tt.term_taxonomy_id 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.term_id = $term_id"); 760 761 $wpdb->query("UPDATE $wpdb->term_taxonomy SET term_id = '$term_id', taxonomy = '$taxonomy', description = '$description', parent = '$parent' WHERE term_taxonomy_id = '$tt_id'"); 762 763 do_action("edit_term", $term_id, $tt_id); 764 do_action("edit_$taxonomy", $term_id, $tt_id); 765 766 $term_id = apply_filters('term_id_filter', $term_id, $tt_id); 767 768 clean_term_cache($term_id, $taxonomy); 769 770 do_action("edited_term", $term_id, $tt_id); 771 do_action("edited_$taxonomy", $term_id, $tt_id); 772 773 return array('term_id' => $term_id, 'term_taxonomy_id' => $tt_id); 774 } 775 776 function wp_update_term_count( $terms, $taxonomy ) { 777 global $wpdb; 778 779 if ( empty($terms) ) 780 return false; 781 782 if ( !is_array($terms) ) 783 $terms = array($terms); 784 785 $terms = array_map('intval', $terms); 786 787 $taxonomy = get_taxonomy($taxonomy); 788 if ( isset($taxonomy->update_count_callback) ) 789 return call_user_func($taxonomy->update_count_callback, $terms); 790 791 // Default count updater 792 $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->term_relationships WHERE term_taxonomy_id = '$term'"); 793 $wpdb->query("UPDATE $wpdb->term_taxonomy SET count = '$count' WHERE term_taxonomy_id = '$term'"); 794 795 return true; 796 } 797 779 798 // 780 799 // Cache 781 800 // 801 802 function clean_object_term_cache($object_ids, $object_type) { 803 global $object_term_cache, $blog_id; 804 805 if ( !is_array($ids) ) 806 $ids = array($ids); 807 808 $taxonomies = get_object_taxonomies($object_type); 809 810 foreach ( $ids as $id ) { 811 foreach ( $taxonomies as $taxonomy ) { 812 if ( isset($object_term_cache[$blog_id][$id][$taxonomy]) ) 813 unset($object_term_cache[$blog_id][$id][$taxonomy]); 814 } 815 } 816 } 782 817 783 818 function clean_term_cache($ids, $taxonomy) { … … 793 828 delete_option("{$taxonomy}_children"); 794 829 wp_cache_delete('get_terms', 'terms'); 795 }796 797 function update_term_cache($terms, $taxonomy = '') {798 foreach ( $terms as $term ) {799 $term_taxonomy = $taxonomy;800 if ( empty($term_taxonomy) )801 $term_taxonomy = $term->taxonomy;802 803 wp_cache_add($term->term_id, $term, $term_taxonomy);804 }805 }806 807 function clean_object_term_cache($object_ids, $object_type) {808 global $object_term_cache, $blog_id;809 810 if ( !is_array($ids) )811 $ids = array($ids);812 813 $taxonomies = get_object_taxonomies($object_type);814 815 foreach ( $ids as $id ) {816 foreach ( $taxonomies as $taxonomy ) {817 if ( isset($object_term_cache[$blog_id][$id][$taxonomy]) )818 unset($object_term_cache[$blog_id][$id][$taxonomy]);819 }820 }821 830 } 822 831 … … 854 863 return; 855 864 856 $terms = get_object_terms($object_ids, get_object_taxonomies($object_type), 'fields=all_with_object_id');865 $terms = wp_get_object_terms($object_ids, get_object_taxonomies($object_type), 'fields=all_with_object_id'); 857 866 858 867 if ( empty($terms) ) … … 865 874 if ( ! isset($object_term_cache[$blog_id][$id]) ) 866 875 $object_term_cache[$blog_id][$id] = array(); 876 } 877 } 878 879 function update_term_cache($terms, $taxonomy = '') { 880 foreach ( $terms as $term ) { 881 $term_taxonomy = $taxonomy; 882 if ( empty($term_taxonomy) ) 883 $term_taxonomy = $term->taxonomy; 884 885 wp_cache_add($term->term_id, $term, $term_taxonomy); 867 886 } 868 887 }
Note: See TracChangeset
for help on using the changeset viewer.