web-dev-qa-db-ja.com

the_tags():タグをアルファベット順ではなくバックエンドにタイプされた順番で表示する

私はWordPressのthe_tags()を使って各記事のタグを片面に表示しています。私がやろうとしているのは、タグをアルファベット順ではなくバックエンドにタイプされた順番で表示することです。 WordPressコーデックスはthe_tags()をソートするための引数を持っていないようで、出力は常にアルファベット順です。

あなたの誰かがチップを持っていますか?

2
user49869

白ウサギに従ってください:

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

あなたがその最後の機能を通して見るならば、あなたはこれを見るべきです:

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

デフォルトではアルファベット順になっているはずです。いいえ、できません。クエリを直接変更できるフィルタはありませんが、うさぎの穴に沿っていくつかのフィルタがあります。 wp_get_object_termsフィルタは私にとって良いもののように見えます。

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

そのコードをどこに追加するかは、状況によって異なります。 function.phpは動作しますが動作しますが、あなたがコードを追加したテーマだけに制限されるでしょう、私はこの場合正しいと思います。 the_tags()行を含めないでください。それはテスト用です。

プラグインファイルまたはmu-pluginファイルを使用すると、フィルタをどのテーマにも適用できます。私はそれがその意図であるとは思わない、そしてそれはとにかく私には少し不親切に私を襲った。繰り返しますが、the_tags()行を含めないでください。

実際にthe_tags()を使いたい場所に書かれているとおりに正確にコードを追加することができますが、それは面倒な方法です。

コードはWordPress Core関数にフックします。 wp_get_object_termsフィルタが実行されるたびに実行されます。 add_filterで行うように、フィルタコールバックをキューに追加する以外に、特別なことをする必要はありません。

必要に応じてフィルタを追加し、後で削除することで、フィルタの実行時期をより細かく制御できます。

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