web-dev-qa-db-de.com

get term by id ohne taxonomie

Kann ich den Begriff anhand seiner ID ermitteln, ohne zu wissen, zu welcher Taxonomie er gehört?

Ich habe ein Metafeld, in dem Term-IDs gespeichert sind, die Taxonomie jedoch nicht. Für alle get_term-Funktionen sind jedoch Taxonomieparameter als erforderlich markiert.

Vielleicht kann ich die Taxonomie des Begriffs anhand der ID (des Begriffs) ermitteln?

5
frnhr

Ja, aber Sie müssen eine eigene SQL-Abfrage erstellen.

Eine modifizierte Version von WP's get_term ():

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

Wahrscheinlich keine gute Idee. Versuchen Sie, die Steuer auch in Ihren Metafeldern zu behandeln ...

3
onetrickpony

Ich habe die Antwort von One Trick Pony akzeptiert, weil sie mich auf den richtigen Weg gebracht hat und meine Frage beantwortet. Am Ende verwende ich dies jedoch, es gibt ein Vollzeitobjekt mit seinen Taxonomiefeldern zurück. Obwohl es ein bisschen hacky ist ...

/**
 * 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