WordPress Version: 5.6
/**
* Maintains a canonical list of terms by syncing terms created for each blog with the global terms table.
*
* @since 3.0.0
*
* @see term_id_filter
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param int $term_id An ID for a term on the current blog.
* @param string $deprecated Not used.
* @return int An ID from the global terms table mapped from $term_id.
*/
function global_terms($term_id, $deprecated = '')
{
global $wpdb;
static $global_terms_recurse = null;
if (!global_terms_enabled()) {
return $term_id;
}
// Prevent a race condition.
$recurse_start = false;
if (null === $global_terms_recurse) {
$recurse_start = true;
$global_terms_recurse = 1;
} elseif (10 < $global_terms_recurse++) {
return $term_id;
}
$term_id = (int) $term_id;
$c = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->terms} WHERE term_id = %d", $term_id));
$global_id = $wpdb->get_var($wpdb->prepare("SELECT cat_ID FROM {$wpdb->sitecategories} WHERE category_nicename = %s", $c->slug));
if (null == $global_id) {
$used_global_id = $wpdb->get_var($wpdb->prepare("SELECT cat_ID FROM {$wpdb->sitecategories} WHERE cat_ID = %d", $c->term_id));
if (null == $used_global_id) {
$wpdb->insert($wpdb->sitecategories, array('cat_ID' => $term_id, 'cat_name' => $c->name, 'category_nicename' => $c->slug));
$global_id = $wpdb->insert_id;
if (empty($global_id)) {
return $term_id;
}
} else {
$max_global_id = $wpdb->get_var("SELECT MAX(cat_ID) FROM {$wpdb->sitecategories}");
$max_local_id = $wpdb->get_var("SELECT MAX(term_id) FROM {$wpdb->terms}");
$new_global_id = max($max_global_id, $max_local_id) + mt_rand(100, 400);
$wpdb->insert($wpdb->sitecategories, array('cat_ID' => $new_global_id, 'cat_name' => $c->name, 'category_nicename' => $c->slug));
$global_id = $wpdb->insert_id;
}
} elseif ($global_id != $term_id) {
$local_id = $wpdb->get_var($wpdb->prepare("SELECT term_id FROM {$wpdb->terms} WHERE term_id = %d", $global_id));
if (null != $local_id) {
global_terms($local_id);
if (10 < $global_terms_recurse) {
$global_id = $term_id;
}
}
}
if ($global_id != $term_id) {
if (get_option('default_category') == $term_id) {
update_option('default_category', $global_id);
}
$wpdb->update($wpdb->terms, array('term_id' => $global_id), array('term_id' => $term_id));
$wpdb->update($wpdb->term_taxonomy, array('term_id' => $global_id), array('term_id' => $term_id));
$wpdb->update($wpdb->term_taxonomy, array('parent' => $global_id), array('parent' => $term_id));
clean_term_cache($term_id);
}
if ($recurse_start) {
$global_terms_recurse = null;
}
return $global_id;
}