web-dev-qa-db-ja.com

特定の順序でIDによる分類用語を取得する

特定の順序でIDによる分類用語を取得する方法以下は私のコードです。引数にIDとpost_inを付けてget_termsを渡したのではないかと思いましたが、自分がすべきと思った結果は見られません。

$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);
2
Denoteone

get_termspost__in引数をサポートしていません そして、注文を強制するような他の引数はありません。ただし、少なくとも2つのフィルタのうちの1つでこれを実現できます。

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と似ていますが、 パラメータは少し異なります

4
s_ha_dum