Puis-je obtenir le terme par son identifiant sans savoir à quelle taxonomie il appartient?
J'ai un méta-champ qui stocke les identifiants de terme, mais ne stocke pas la taxonomie. Cependant, toutes les fonctions get_term
ont un paramètre de taxonomie marqué comme requis.
Peut-être que je peux obtenir la taxonomie du terme par son identifiant (term) en quelque sorte?
Oui, mais vous devez créer votre propre requête SQL.
Une version modifiée de get_term () de WP:
function &get_term_by_id_only($term, $output = OBJECT, $filter = 'raw') {
global $wpdb;
$null = null;
if ( empty($term) ) {
$error = new WP_Error('invalid_term', __('Empty Term'));
return $error;
}
if ( is_object($term) && empty($term->filter) ) {
wp_cache_add($term->term_id, $term, 'my_custom_queries');
$_term = $term;
} else {
if ( is_object($term) )
$term = $term->term_id;
$term = (int) $term;
if ( ! $_term = wp_cache_get($term, 'my_custom_queries') ) {
$_term = $wpdb->get_row( $wpdb->prepare( "SELECT t.* FROM $wpdb->terms AS t WHERE t.term_id = %s LIMIT 1", $term) );
if ( ! $_term )
return $null;
wp_cache_add($term, $_term, 'my_custom_queries');
}
}
if ( $output == OBJECT ) {
return $_term;
} elseif ( $output == ARRAY_A ) {
$__term = get_object_vars($_term);
return $__term;
} elseif ( $output == ARRAY_N ) {
$__term = array_values(get_object_vars($_term));
return $__term;
} else {
return $_term;
}
}
Probablement pas une bonne idée. Essayez de gérer la taxe aussi dans vos champs de méta ...
J'ai accepté la réponse de One Trick Pony parce que cela me permettait de trouver la bonne voie et que cela répondait à ma question. Cependant, à la fin, j'utilise ceci, il renvoie un objet terme complet avec ses champs de taxonomie. Bien que ce soit un peu hacky ...
/**
* Get ther without khowing it's taxonomy. Not very Nice, though.
*
* @uses type $wpdb
* @uses get_term()
* @param int|object $term
* @param string $output
* @param string $filter
*/
function &get_term_by_id($term, $output = OBJECT, $filter = 'raw') {
global $wpdb;
$null = null;
if ( empty($term) ) {
$error = new WP_Error('invalid_term', __('Empty Term'));
return $error;
}
$_tax = $wpdb->get_row( $wpdb->prepare( "SELECT t.* FROM $wpdb->term_taxonomy AS t WHERE t.term_id = %s LIMIT 1", $term) );
$taxonomy = $_tax->taxonomy;
return get_term($term, $taxonomy, $output, $filter);
}