画像の枚数によるタグクラウドの自作
この記事は公開または最後に更新されてから3077日が経過しています。情報が古くなっている可能性があるのでご注意下さい。
サイドバーにタグクラウドを表示するのに wordpress には標準で wp_tag_cloud() という関数が用意されていますし、フォントの大きさだけでなく色も変えるなどプラグインも数多く存在しています。
実際、以前は WP Colorful Tag Cloud を使用していましたし、 WP-Cumulus は今も使用中です。(いえ、もう、だいぶ前に使わなくなっています)
ただ、どれもタグクラウドは投稿タグにしてもカテゴリーにしてもその使用頻度、その投稿タグ(カテゴリー)が使用されている投稿の件数が表示の基準となっています。
私の画像サイトは鳥名を投稿タグに使っていますが、投稿の件数ではなくその投稿タグに属する画像の枚数を基準にしてタグクラウドを表示させたいのです。というところで自分で作ることにします。
これには別にも使用したいことがあって、画像一覧のページにおいて、鳥名で絞り込んでの画像一覧を表示させる場合に、その鳥名をタグクラウドから指定するのに使いたいということです。
関数で、その投稿タグに属する画像の数を得ることができるのか、そもそもそんな関数が存在するのかすらわからなかったので関数はあきらめて直接データベースにアクセスすることにしました。
SQL に関しては前ページ画像一覧ページでお世話になった「PHPによるWordPressカスタマイズブック―3.x対応」の本を参考にして試行錯誤して組み立てました。
投稿タグに属する画像の個数を求める SQL は以下のようでいいと思います。
${stag_name} に投稿タグのslugを入力します。
このタグクラウドを自作するにあたって出力に関しては表示で2種類、そしてそれぞれにリンクで2種類、計4種類の出力を考えています。
鳥画像の英名、学名を掲載しているのでアクセスログを見ていると外国からのアクセスも少数あったりします。日本語環境のない人たちにどのように表示されるのかよくわかりませんが、少なくとも日本語は文字化けするだけだと思われるので、その場合は日本語の表示は無い方が良いはずです。で、鳥名の一覧がわかるだけでもいいのではと思い、ブラウザの言語設定に ja 以外の言語が設定されている場合はタグリストとして英名で表示しようというのが一つです。
そして、リンクに関しては普通に投稿タグのページ tag.php などに対してのリンクと投稿タグによって絞り込んだ画像一覧ページを表示するためのリンクです。
と、いうことで作成する関数には2つの引数を設けました。
2行目の引数に関しては $openum がリンク、 $eng が日本語か英語かの指定。
$openum ==0で通常の投稿タグページ、!=0で画像一覧、 $eng ==0で日本語、!=0で英語表示。
3行目の global $wpdb; はfunction.php内の関数でデータベースにアクセスするときのお約束で必要です。
5行目で全投稿タグの情報を取得します。
9行目から投稿タグ一つ一つに対して処理するループの開始です。
11から24行目でその投稿タグに属する画像の数を取得。
25行目で投稿タグのslugを添え字にして和名と画像の数を”ー”でつないだ文字列の連想配列を生成していきます。これは英語表示の時にタグのデータをまとめてslugをアルファベット順で並び替えるために作っています。
26から28行目で画像の個数の最大値をもとめています。
31から42行目まではループが終わり全投稿タグの個数を得られたところで、画像の個数によるclass分けのための数値を設定しています。34行目の”-150”、42行目の”+100”という数字は私のサイトにおいて画像の数の多い2種類が他より突出しているために他とのバランスをとるための小細工です。たいした意味はありません。
44から47行目は英語表示指定($eng==1)の時、生成したタグのデータが入った連想配列を添え字のslugでアルファベット順に並び替えています。そして英語表示の場合は<li></li>タグで出力するので先んじて<ul>タグを出力しておきます。
49から88行目のループで全投稿タグの情報を出力します。 $openum と $eng によって条件分けしています。82行目と85行目の JavaScript:sendtagslug は投稿タグで絞り込んで画像一覧ページを表示するための関数ですがこの部分はまだ未投稿です。
最後に英語表示の場合は</ul>タグを出力します。
・・・
各投稿タグページへのリンクは関数を使わないで、「/?tag=」+slugというパターンが決まっているので文字列にて直に指定しています。
・・・
後になって良く見てみるとまだまだ速度アップのマージンはありそうです。
と、いろいろあーだこーだと考えた末に、次なる一手を講じました。
ここのページが長くなりそうなので、続きは新しいページ、「続、画像の枚数によるタグクラウドの自作」へと展開することにします。
Post : 2012/05/18 23:40
Comments feed
Trackback URL : https://strix.main.jp/wp-trackback.php?p=16258