[WP3.8] タグ一覧表示

WordPressのタグ仕様はなかなか興味深いです。まずカテゴリとタグの名称やスラッグはどちらも wp_terms に格納されています。(welCartをインストールしたので、商品やお勧め商品、新商品、商品ジャンルなどが見受けられますが、気にしないでください。)

mysql> select * from wp_terms;
+---------+--------------------+-----------------------------+------------+
| term_id | name               | slug                        | term_group |
+---------+--------------------+-----------------------------+------------+
|       1 | 未分類             | %e6%9c%aa%e5%88%86%e9%a1%9e |          0 |
|       2 | 商品               | item                        |          0 |
|       3 | お勧め商品         | itemreco                    |          0 |
|       4 | 新商品             | itemnew                     |          0 |
|       5 | 商品ジャンル       | itemgenre                   |          0 |
|       6 | タグA              | %e3%82%bf%e3%82%b0a         |          0 |
|       7 | タグB              | %e3%82%bf%e3%82%b0b         |          0 |
|       8 | タグC              | %e3%82%bf%e3%82%b0c         |          0 |
+---------+--------------------+-----------------------------+------------+
8 rows in set (0.00 sec)

また、カテゴリとタグをそれぞれどこで識別しているかといえば、wp_term_taxonomy で定義しています。このtaxonomyを自由に定義することで、カスタムタクソノミーができるわけですね。ちゃんと親子階層構造にも対応しているし、柔軟に出来ているなぁ。タグも親子構造ができそうな感じですね。

mysql> select * from wp_term_taxonomy;
+------------------+---------+----------+-------------+--------+-------+
| term_taxonomy_id | term_id | taxonomy | description | parent | count |
+------------------+---------+----------+-------------+--------+-------+
|                1 |       1 | category |             |      0 |     8 |
|                2 |       2 | category |             |      0 |     0 |
|                3 |       3 | category |             |      2 |     0 |
|                4 |       4 | category |             |      2 |     0 |
|                5 |       5 | category |             |      2 |     0 |
|                6 |       6 | post_tag |             |      0 |     2 |
|                7 |       7 | post_tag |             |      0 |     1 |
|                8 |       8 | post_tag |             |      0 |     1 |
+------------------+---------+----------+-------------+--------+-------+
8 rows in set (0.00 sec)

それでは、タグと記事(post)の関連付けはどこでしているかといえば、wp_term_relationships で定義しています。

mysql> select * from wp_term_relationships;
+-----------+------------------+------------+
| object_id | term_taxonomy_id | term_order |
+-----------+------------------+------------+
|         1 |                1 |          0 |
|        20 |                1 |          0 |
|        22 |                1 |          0 |
|        24 |                1 |          0 |
|        29 |                1 |          0 |
|        32 |                1 |          0 |
|        34 |                1 |          0 |
|        34 |                6 |          0 |
|        34 |                8 |          0 |
|        38 |                1 |          0 |
|        38 |                6 |          0 |
|        38 |                7 |          0 |
+-----------+------------------+------------+
12 rows in set (0.00 sec)

wp_term_relationships.object_id が wp_terms の post_id と一致するので、これでpostとの関連付けが行われるわけですね。

そんなことに感心しつつ、とりあえずタグ一覧表示のコードをサクッと書いてみましたw

<?php
    $tag_posts = $wpdb->get_results("select t.name from wp_terms as t left join wp_term_taxonomy as tt on t.term_id = tt.term_id where tt.taxonomy = 'post_tag'");
    echo '<ul>';
    foreach($tag_posts as $tag_post){
        echo '<a href="/?tag=' . $tag_post->name . '">' . $tag_post->name . '</a></li><br />';
    }
    echo '</ul>';

?>
カテゴリー: 未分類   パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

* Copy This Password *

* Type Or Paste Password Here *

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>