按ID获取术语,不使用分类

时间:2011-07-20 作者:frnhr

我可以在不知道该术语属于哪个分类法的情况下通过其id获取该术语吗?

我有一个存储术语ID的元字段,但不存储分类法。然而,所有get_term 函数具有标记为必需的分类参数。

也许我可以通过它的(术语)id来获得术语的分类法?

3 个回复
最合适的回答,由SO网友:onetrickpony 整理而成

是的,但您需要创建自己的SQL查询。

WP的get\\u 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;
    }
}
可能不是个好主意。试着在你的元域中处理税务。。。

SO网友:frnhr

我接受了小马的回答,因为它让我走上了正确的道路,并且回答了我的问题。然而,在最后我使用它时,它会返回带有其分类字段的完整术语对象。虽然有点黑。。。

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

}

SO网友:Léo Muniz

这是一个非常古老的问题,但我只使用WP方法来给出答案。可以用[get_terms( WP_Term_Query_array )][1] 使用include param(术语ID的数组):

$terms_ids = [ 0, 1, 2 ];
$terms = get_terms( array( \'include\' => $terms_ids ) );
该方法返回WP Term对象的数组。

有关WP_Term_Query 对象及其参数。

结束

相关推荐

Highlight nav menu terms

好的,我有custom post types 和custom taxonomies. 我有一个由自定义分类法组成的子菜单。示例:registered taxonomy: 电影和terms: 行动、冒险、等等。(=菜单项)问题:现在I need to add a highlight-class 当当前显示的页面是其中一个术语的存档时,将添加到术语。我几乎想用我的导航菜单作为面包屑。