web-dev-qa-db-fra.com

obtenir terme sans identifiant

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?

5
frnhr

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 ...

3
onetrickpony

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);

}
6
frnhr