我有一个TERM_TASTIONY_ID--有API调用来获取分类吗?

时间:2014-07-03 作者:setterGetter

Issue: 我有term\\u taxonomy\\u id,我没有taxonomy名称,我想检索term对象而不进行直接数据库查询。

Thoughts: 以及API文档get_term_by 假设需要分类法,并且wp_term_taxonomy table 如果我有术语\\u taxonomy\\u id,那么模式使获得分类法变得非常简单,因此这应该非常简单——但是我似乎没有看到任何API调用可以实现这一点。

我可以使用以下方式调用数据库:

select taxonomy from wp_term_taxonomy where term_taxonomy_id={ID}
但不希望直接查询数据库。是否有API调用可以实现这一点?还是从term\\u taxonomy\\u id获取term对象的更好方法?

谢谢

4 个回复
SO网友:mrwweb

我很确定这一点,但至少目前的答案是否定的。没有针对它的API调用。

为了再次核实,我问core developer Andrew Nacin about this on Twitter. 他的回答是:

目前,term\\u taxonomy\\u id本质上是私有的。您可能永远都不会使用它。

也许值得再问一个关于你正在做什么的问题,或者至少是关于导致这种情况的特定情况的扩展问题,因为你目前的问题非常罕见,可能从一开始就没有必要。同样来自Nacin:

我真的不知道你什么时候会有term\\u taxonomy\\u id,而且还不知道term\\u id和taxonomy。

<小时>Addendum: 还应注意的是taxonomy schema and meta relationships are slated to undergo some changes, 因此,这可能是一个特别危险的时间来尝试API之外的东西。

SO网友:Nicolai Grossherr

@我认为韦伯先生在这里给出了正确的答案,你应该考虑他的反对意见。

但是如果您想要这个功能,那么您必须自己实现API调用。就像你说的,这很容易做到:

// create your own API call
function get_taxonomy_by_term_taxonomy_id( $term_taxonomy_id = \'\' ) {
    global $wpdb;
    if ( empty( $term_taxonomy_id ) ) {
        return false;
    }
    $taxonomy =
        $wpdb->get_row(
            $wpdb->prepare(
                "SELECT taxonomy FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = %d LIMIT 1",
                $term_taxonomy_id
            )
        );
    return $taxonomy;
}
如果您正在考虑使用挂钩-get_termget_$taxonomy - 可在get_term_by() 函数,这不值得,因为您必须以这种方式进行第二次数据库查询。

SO网友:user37913

EDIT 注意到最初的问题是关于分类法,而不是术语。

我想把这个留在这里,以防将来对任何人都有帮助

这是我自己的解决方案。只需在你的函数中加入这个。php文件。。。

if( ! function_exists(\'get_term_by_term_taxonomy_id\') )
{
    function get_term_by_term_taxonomy_id( $term_taxonomy_id = null )
    {
        global $wpdb;

        $res = $wpdb->get_row( 
            $wpdb->prepare(
                \'select term_id, taxonomy from {$wpdb->prefix}_term_taxonomy where term_taxonomy_id = %d\',
                (int) $term_taxonomy_id
            )
        );

        if( is_wp_error($res) ) return false;

        return get_term_by(\'id\', $res->term_id, $res->taxonomy);
    }
}

SO网友:Luke Schlather

此解决方案的效率低于原始SQL,但它坚持使用公共API调用:

private function term_by_term_taxonomy_id($term_taxonomy_id) {
  $taxonomies = get_taxonomies();
  foreach ($taxonomies as $taxonomy) {
    $term = get_term_by(\'term_taxonomy_id\', $term_taxonomy_id, $taxonomy);

    if ($term) {
      return $term;
    }
  }

  return null;
}

结束

相关推荐

我可以在‘Get_the_Terms’中使用自定义元值吗?

我有一个自定义页面模板,这是我试图操纵的代码,根据我为特定页面编写的自定义元值进行更改。$terms = get_the_terms($post->id, \'custom-taxonomy\' ); 在CPT页面上,我有一个自定义元字段“分类名称”,自定义元值是“自定义分类”我试图用上面的代码做的是:$terms = get_the_terms($post->id, get_post_meta($post->ID,\'metafield-taxonomy-name\',TRU