web-dev-qa-db-fra.com

the_tags (): affiche les balises selon l'ordre dans lequel elles sont saisies dans le backend, et non par ordre alphabétique

J'utilise la fonction the_tags() de WordPress pour afficher les balises de chaque publication d'un seul côté. Ce que j'ai l'intention de faire est d'afficher les balises selon l'ordre dans lequel elles ont été saisies dans le backend, et non par ordre alphabétique. Le codex WordPress ne semble pas avoir d'argument pour trier the_tags() et la sortie est toujours dans l'ordre alphabétique.

Est-ce que quelqu'un d'entre vous a un pourboire?

2
user49869

Suis le lapin blanc:

  1. the_tags()
  2. get_the_tag_list()
  3. get_the_term_list()
  4. get_the_terms()
  5. wp_get_object_terms()

Si vous regardez à travers cette dernière fonction, vous devriez voir ceci:

$defaults = array('orderby' => 'name', 'order' => 'ASC', 'fields' => 'all');

Vous devriez avoir l'ordre alphabétique par défaut. Et non, je ne vois aucun filtre qui vous permettrait de modifier directement la requête, mais il existe plusieurs filtres le long de ce trou de lapin. Le filtre wp_get_object_terms me semble bon.

// you will probably need to run this once to reset the cache
// wp_cache_flush();

function id_ordered_tags_wpse_144703($terms, $object_ids, $taxonomies, $args) {

  $taxonomies = explode(',',$taxonomies); // quoted and comma seperated string

  if (1 < count($taxonomies) && !in_array("'post_tag'",$taxonomies)) return $terms;

  $sorted = array();
  foreach ($terms as $term) {
    $sorted[$term->term_id] = $term;
  }

  ksort($sorted);

  return $sorted;
}
add_filter('wp_get_object_terms','id_ordered_tags_wpse_144703',10,4);

// test it
the_tags();

Où vous ajoutez ce code dépend du contexte. Dans function.php fonctionnerait mais fonctionnerait, mais serait limité au thème auquel vous ajoutez le code, ce qui, je suppose, est correct dans ce cas. N'incluez pas la ligne the_tags(). C'est juste pour les tests.

Un fichier plug-in ou un fichier mu-plugin permettrait au filtre de fonctionner pour n'importe quel thème. Je doute que ce soit le but recherché, et cela me semble un peu hostile de toute façon. Encore une fois, n'incluez pas la ligne the_tags().

Vous pouvez en fait ajouter le code exactement tel qu’il a été écrit à l’endroit où vous voulez utiliser the_tags(), bien que ce soit une façon compliquée de le faire.

Le code s'accroche aux fonctions de WordPress Core. Il s'exécutera chaque fois que le filtre wp_get_object_terms sera exécuté. Vous n'avez rien d'autre à faire que d'ajouter le rappel de filtre à la file d'attente, ce que vous faites avec add_filter.

Vous pouvez mieux contrôler le moment où le filtre s'exécute en l'ajoutant au moment voulu et en le supprimant par la suite:

add_filter('wp_get_object_terms','id_ordered_tags_wpse_144703',10,4);
// test it
the_tags();
remove_filter('wp_get_object_terms','id_ordered_tags_wpse_144703',10);
4
s_ha_dum