如何按ID以特定顺序获取分类术语

时间:2013-12-19 作者:Denoteone

如何按ID按特定顺序获取分类术语。下面是我的代码,我想如果我通过了get_terms 带ID和post\\u的参数,但我没有看到我认为应该看到的结果。

$args_terms = array(
                \'post_in\' => array(47, 48, 49, 46 , 50, 5),
                \'orderby\' => \'post_in\',
                \'parent\' => \'0\'
            );

$custom_post_type = \'menu-food\';
$taxonomy = \'menu-food-categories\';
$taxonomy_terms = get_terms( $taxonomy, $args_terms);

1 个回复
SO网友:s_ha_dum

get_terms does not support a post__in argument 我看不出有任何其他论点可以让你强行下命令。但是,您可以使用一个或至少两个过滤器来完成此操作:

function gto_forced_order($orderby) {
  $orderby = "FIELD(t.term_id,5,1,4)";
  return $orderby;
}
add_filter(\'get_terms_orderby\',\'gto_forced_order\');

$terms = get_terms(\'category\');
var_dump($terms);
或。。。

function gto_forced_order($pieces) {
  $pieces[\'orderby\'] = "ORDER BY FIELD(t.term_id,5,1,4)";
  return $pieces;
}
add_filter(\'terms_clauses\',\'gto_forced_order\');
那个5,1,4 是术语ID。查询将按此处给出的内容进行排序。

这些过滤器都将在全球范围内工作,将每个调用更改为get_terms, 但通过使用过滤器提供的其他参数,您可以控制过滤器的运行位置。

function gto_forced_order($pieces,$taxonomies,$args) {
  if (in_array(\'category\',$taxonomies)) {
    $pieces[\'orderby\'] = "ORDER BY FIELD(t.term_id,5,1,4)";
  }
  return $pieces;
}
add_filter(\'terms_clauses\',\'gto_forced_order\',1,3);
如果您添加var_dump($pieces,$taxonomies,$args) 在回调的顶部,您可以看到您必须处理的内容(尽管这会造成混乱——只是调试)。

类似于get_terms_orderby 但是parameters are a bit different.

结束