2009年2月のブログ記事一覧

特定カテゴリの記事一覧などを表示させる際、

<?php query_posts('cat=8'); ?>
<?php while (have_posts()) : the_post(); ?>
//ほげほげ
<?php endwhile;?>

という風にquery_posts()を使って表示させると、条件分岐タグ(is_home()、is_category()など)の動作に影響を与えてしまいます。例えば「カテゴリID3のカテゴリページ」のサイドバーで、query_posts()を使ってカテゴリID8の記事一覧を表示させると、その行以降はis_category(‘8’)に対してtrueが返ってきてしまいます。

それは困る、という場合は、

1.get_posts()を使ったマルチループを使う

<?php $myposts = get_posts('category=8'); ?>
<?php foreach($myposts as $post): ?>
<?php setup_postdata($post); ?>
//ほげほげ
<?php endforeach; ?>

あるいは、

2.新たにクエリを発行する

<?php $my_query = new WP_Query('cat=8'); ?>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
//ほげほげ
<?php endwhile;?>

という書き方をすれば大丈夫です。

たとえば拡張子が.htmlのファイルでPHPを使用したい場合は、.htaccessファイルで設定変更することで実現できます。ただし、サーバーに負荷がかかるのでアクセスの多いサイトではあまり勧められません。

.htaccessファイルに下記1行を追加します。

AddType application/x-httpd-php .htm .html

尚、サーバで上記の設定変更が許可されていない場合は Internal Server Error になります。たぶん。