web-dev-qa-db-fra.com

Comment puis-je obtenir les termes de taxonomie par ID dans un ordre spécifique

Comment puis-je obtenir les termes de taxonomie par ID dans un ordre spécifique? Ci-dessous est mon code et je pensais que si je passais get_terms les arguments avec ID et post_in mais je ne voyais pas les résultats que je pensais devoir.

$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_terms NE PREND PAS EN CHARGE UN ARGUMENT post__in et je ne vois aucun autre argument permettant de forcer un ordre. Vous pouvez toutefois y parvenir avec un seul filtre pour au moins deux:

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

Ou...

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');

Ce 5,1,4 sont les identifiants de terme. La requête va trier ce qui est donné ici.

Ces filtres fonctionneront tous deux de manière globale, en modifiant chaque appel en get_terms, mais en utilisant les autres arguments proposés par les filtres, vous pouvez contrôler l'emplacement du filtre.

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

Si vous ajoutez var_dump($pieces,$taxonomies,$args) en haut de ce rappel, vous pouvez voir avec quoi vous devez travailler (bien que cela crée un désordre - le débogage seulement).

C'est similaire avec get_terms_orderby mais les paramètres sont un peu différents .

4
s_ha_dum