サポート » 使い方全般 » the_tags()の表示順カスタマイズ

  • 解決済 mutty

    (@mutty)


    <?php the_tags(); ?>

    で表示されるタグをIDの昇順で表示させることは可能でしょうか?

    タグを、大分類・中分類・小分類と分け、大分類から若いIDを割り当て、

    「大分類→中分類→小分類」と表示させたいのです。

    よろしくお願いします。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • the_tagsだけでは無理っぽいので
    get_the_tags
    で属するタグ一覧を取っておいて、phpの配列で並び替えることになるかもです。
    もしくはそういうショートタグでも作ってしまえば。

    kvexさん返信ありがとうございます。
    phpの配列やショートタグはヒントなどがないとどうにもこうにものレベルです…
    あと、タグはリンク付きにしたいのです。
    丸投げな感じで申し訳ないです…

    まわりくどいかな?
    もっと短く書けそうな気もするけど。

    <?php
    // var_dump(get_attachment_link($post->id));
    $taglist = get_the_tags();
    $cnt = 0;
    foreach($taglist as $val){
      $tag_list[$cnt]['name'] = $val -> name;
      $tag_list[$cnt]['slug'] = $val -> slug;
      $cnt++;
    }
    foreach($tag_list as $key => $row){
    $sort[$key] = $row["slug"];
    }
    array_multisort($sort,SORT_ASC,$tag_list);
    var_dump($tag_list);
    ?>

    kvexさんありがとうございます。

    上記のコードを試したことろ、

    array(4) { [0]=> array(2) { [“name”]=> string(12) “タグ1” [“slug”]=> string(3) “r00” } [1]=> array(2) { [“name”]=> string(12) “タグ2” [“slug”]=> string(3) “r01” } [2]=> array(2) { [“name”]=> string(3) “タグ3” [“slug”]=> string(3) “r22” } [3]=> array(2) { [“name”]=> string(21) “タグ4” [“slug”]=> string(12) “r31” } }

    と表示されるだけでした…

    お手数おかけします。

    はい、そのとおりですね。ちゃんと動いています。
    ここまでできてても「?」なんですかね?

    「?」ですね。初心者でスイマセン。

    ヒントがあればなんとかなる、ということだったので、あとは表示部分だけだと思うんですけど。
    というか、本当にこれでいいのかな?という一抹の不安は残りますけどね。
    タグのIDってなんだろう?と実は思っているので。

    <?php
    $taglist = get_the_tags();
    $cnt = 0;
    foreach($taglist as $val){
      $tag_list[$cnt]['name'] = $val -> name;
      $tag_list[$cnt]['slug'] = $val -> slug;
      $cnt++;
    }
    foreach($tag_list as $key => $row){
    $sort[$key] = $row["slug"];
    }
    array_multisort($sort,SORT_ASC,$tag_list);
    
    foreach($tag_list as $val){
    ?>
    <a href="<?php bloginfo(url); ?>/tag/<?php echo $val['slug'];?>"><?php echo $val['name'];?></a> :
    <?php } ?>

    自宅のテスト用サーバを落としちゃったので、未確認ですがおよそこんな感じじゃぁないかと。

    kvexさんありがとうございます。
    タグのID昇順で表示されました。

    これに「区切り文字」を入れることも可能でしょうか?
    上記のコードだと「:」が全てのタグについてしまいますよね?
    お時間ありましたらよろしくお願いします。

    <a href="<?php bloginfo(url); ?>/tag/<?php echo $val['slug'];?>"><?php echo $val['name'];?></a> :
    <?php } ?>

    ここに:があるジャマイカ。お好きなものに変更でъ(`ー゜)

    kvexさん、すいません・・・勘違いしてました。

    これは、”slug”順の表示になりますよね?
    自分が思っていたのは”term_id”順だったので上記を参考に、

    <?php
    $taglist = get_the_tags();
    $cnt = 0;
    foreach($taglist as $val){
      $tag_list[$cnt]['name'] = $val -> name;
      $tag_list[$cnt]['slug'] = $val -> slug;
      $tag_list[$cnt]['term_id'] = $val -> term_id;
      $cnt++;
    }
    foreach($tag_list as $key => $row){
    $sort[$key] = $row["term_id"];
    }
    array_multisort($sort,SORT_ASC,$tag_list);
    
    foreach($tag_list as $val){
    ?>
    <a href="<?php bloginfo(url); ?>/tag/<?php echo $val['slug'];?>"><?php echo $val['name'];?></a> :
    <?php } ?>

    で表示させることができました。ありがとうございます。
    まぎらわしい言い方だったらすいませんでした・・・

    「区切り文字」というのは、「:」があるのは確認していたのですが、全てのタグ名の後に付いてしまい、

    タグ1:タグ2:タグ3:タグ4:

    となってしまうので、

    タグ1:タグ2:タグ3:タグ4

    と出来たらいいなと思ってまして・・・

    言葉足らずで何度もお手数おかけしてすいませんです。

    <?php
    $taglist = get_the_tags();
    $cnt = 0;
    foreach($taglist as $val){
      $tag_list[$cnt]['name'] = $val -> name;
      $tag_list[$cnt]['slug'] = $val -> slug;
      $tag_list[$cnt]['term_id'] = $val -> term_id;
      $cnt++;
    }
    foreach($tag_list as $key => $row){
    $sort[$key] = $row["term_id"];
    }
    array_multisort($sort,SORT_ASC,$tag_list);
    ?>
    
    <?php foreach($tag_list as $val): next($tag_list); ?>
    <a href="<?php bloginfo(url); ?>/tag/<?php echo $val['slug'];?>/"><?php echo $val['name'];?></a>
    <?php echo (current($tag_list) !== false) ? ' : ' : '' ?>
    <?php endforeach; ?>

    で区切り文字を入れるようにしました。

    このような書き方でいいのでしょうか?

    ご指摘なければ後日「解決済み」にさせていただきます。

    ご指導いただいた、kvexさん、shokun0803さん、ありがとうございました。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「the_tags()の表示順カスタマイズ」には新たに返信することはできません。