12/23
[超いまさら]もうつまづかないFlashLiteデザイン実装12/23
年末はゲーム三昧12/06
WordPressのカテゴリまわりの話ちょっと今お仕事で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のオプションのechoを0(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;
}
} とまぁ、こんな感じでじってやることでカテゴリ周りはかなり自由度が高くなるかと思います。
あとは、カテゴリの並び替えを実装するプラグインを入れてやれば、とりあえず再現できないデザインは無くなるのではないでしょうか。
いや、どうだろう。
12/05
MT4.23:セキュリティーアップデート12/02
再びサラリーマンに。【業務連絡】