Heim > Artikel > Backend-Entwicklung > wordpress源码读研之困惑:If no taxonomy, assume tt_ids
在下读wordpress源码,颇多收获。下面函数里,"If no taxonomy, assume tt_ids"为何意?矛盾吧?既为空,哪来的 term_id ?可以假定么?既为空,如何从表 term_taxonomy 中选择?
请高手指点一二为盼。
/**
* Will remove all of the term ids from the cache.
*
* @since 2.3.0
* @uses $wpdb
*
* @param int|array $ids Single or list of Term IDs
* @param string $taxonomy Can be empty and will assume tt_ids, else will use for context.
* @param bool $clean_taxonomy Whether to clean taxonomy wide caches (true), or just individual term object caches (false). Default is true.
*/
function clean_term_cache($ids, $taxonomy = '', $clean_taxonomy = true) {
global $wpdb;
if ( !is_array($ids) )
$ids = array($ids);
$taxonomies = array();
// If no taxonomy, assume tt_ids.
if ( empty($taxonomy) ) {
$tt_ids = array_map('intval', $ids);
$tt_ids = implode(', ', $tt_ids);
$terms = $wpdb->get_results(" SELECT term_id, taxonomy FROM $wpdb->term_taxonomy WHERE
term_taxonomy_id IN ($tt_ids)");
$ids = array();
foreach ( (array) $terms as $term ) {
$taxonomies[] = $term->taxonomy;
$ids[] = $term->term_id;
wp_cache_delete($term->term_id, $term->taxonomy);
}
$taxonomies = array_unique($taxonomies);
} else {
$taxonomies = array($taxonomy);
foreach ( $taxonomies as $taxonomy ) {
foreach ( $ids as $id ) {
wp_cache_delete($id, $taxonomy);
}
}
}
foreach ( $taxonomies as $taxonomy ) {
if ( $clean_taxonomy ) {
wp_cache_delete('all_ids', $taxonomy);
wp_cache_delete('get', $taxonomy);
delete_option("{$taxonomy}_children");
// Regenerate {$taxonomy}_children
_get_term_hierarchy($taxonomy);
}
/**
* Fires once after each taxonomy's term cache has been cleaned.
*
* @since 2.5.0
*
* @param array $ids An array of term IDs.
* @param string $taxonomy Taxonomy slug.
*/
do_action( 'clean_term_cache', $ids, $taxonomy );
}
wp_cache_set( 'last_changed', microtime(), 'terms' );
}
If no taxonomy, assume tt_ids--如果参数 taxonomy 为空的话,我们就假定 参数 id 是 tt_ids ----term_taxonomy 表的
term_taxonomy_id .否则,视为 term_id.
如果 $taxonomy(分类名称)为空
则取 $ids(分类号)对应的分类名
因为后面的检索中是以分类名为基准的