雇われWebデザイナー、SWDのサイトです。なにも目指してません。すみません。

2008

12/06

WordPressのカテゴリまわりの話 この記事をはてなブックマークに登録 この記事をクリップ! Yahoo!ブックマークに登録 Buzzurlにブックマーク
CATEGORY:, TAG:
MT復帰の際に過去の一部の記事で正常に表示できないものがあるようです。
閲覧数の多い記事から少しずつ直していこうと思いますがすべての記事の復旧は難しいと思います。
わざわざお越しの方には申し訳ありませんがご容赦ください。

ちょっと今お仕事でWordPressで管理するサイトを作ってまして、
実はWordPressをまともに触るのは初めてだったわけなのですがこれが結構便利なのね。

とはいいつつも、Nucleus、MovableType、WordPress共にやはり一長一短があるわけでして。
特にWordPressでは、テンプレートタグ周りがあまり賢くないのが多くて(古いものは特に)テンプレート編集時には結局PHPをガリガリ直接書いてやらないといけないものがあるので、時間がないときはプラグインに頼ってしまいたくなりがち。

でも、逆に言うとPHPがある程度書ければたいていのことは(力技になるかもですが)実現できるわけです。

で、WordPressで記事を引っ張ってごにょごにょする時に色々とお世話になる関数
query_posts
について少し触れてみたいと思います。

例えば、特定のページ内で全く異なるカテゴリの記事タイトルを呼び出したい場合は、
<?php if (have_posts()) : query_posts('category_name=hoge'); ?>
<?php while (have_posts()) : the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php endwhile; endif; ?> ってな感じ。

でもこのquery_postsを呼び出しちゃうと、そのページ自体のカテゴリも先に呼び出したhoge扱いになっちゃうので、その後にページのタイトルを取得しても本来のタイトルではなくhogeのタイトルしか取得できなくなっちゃうので難儀しちゃうわけです。
(あれ?私だけ?)

というわけで、そんなときの魔法の合言葉がこちら <?php if (have_posts()) : query_posts($query_string . '&category_name=hoge'); ?>
<?php while (have_posts()) : the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php endwhile; endif; ?> これで、ページ自体に影響を与えずに取得したい箇所に記述すれば正しくカテゴリを拾ってくれるようになります。

また、カテゴリの一覧表示がしたいときは
wp list categories
なるテンプレートタグが用意されているわけですが、このテンプレートタグが微妙に使い勝手が悪い。
具体的に言うと、<li>タグでくくられた状態で出力されるわけで、こうなると単純に並べただけの出力形式しか再現できないため表現に制限ができてしまう。
(できればカテゴリの名前とURLを配列に格納してくれるだけっていうシンプルなオプションがあると助かるのですが。)

というわけで、力技で解決するならwp list categoriesのオプションのecho0(false)にして変数に格納しておき、正規表現でいらないタグを削ってから出力させる方法をとったりします。 //親カテゴリに属するサブカテゴリを配列で取得
$subCategories = explode(' </div>', wp_list_categories('echo=0&title_li=&style=none&child_of=3'));
$tmp = 0;
//正規表現
$reg = '/<a href=["\']([^"\']*)["\'][^>]*>(.*?)<\/a>/';
foreach($subCategories as $cat) {
  if(preg_match($reg, $cat, $value)) {
   if($tmp == 0){echo '<a href="#anchor-'.$tmp.'">'.$value[2].'</a>';}
   else{echo '|<a href="#anchor-'.$tmp.'">'.$value[2].'</a>';}
  $tmp =$tmp+1;
  }
} とまぁ、こんな感じでじってやることでカテゴリ周りはかなり自由度が高くなるかと思います。
あとは、カテゴリの並び替えを実装するプラグインを入れてやれば、とりあえず再現できないデザインは無くなるのではないでしょうか。


いや、どうだろう。

トラックバック(0)
トラックバックURL: http://www.heion.net/mt/mt-tb.cgi/271
コメント(0)
[PR]
_FEED
このRSSを取得する
_CATEGORY
_TAG
                                       
_ARCHIVE
2010年5月 (5)
2010年4月 (2)
2009年10月 (3)
2009年8月 (1)
2009年7月 (2)
2009年6月 (6)
2009年5月 (1)
2009年4月 (2)
2009年3月 (2)
2009年2月 (1)
2009年1月 (3)
2008年12月 (5)
_BLOG PARTS


あわせて読みたいブログパーツフィードメーター - 日々平穏スカウター : 日々平穏
OpenID対応しています OpenIDについて

このブログはクリエイティブ・コモンズでライセンスされています。