WordPress のループタグで条件を指定

この記事をフルスクリーンで見るフルスクリーンモードを終了するには Esc キーを押してください。または、ココをクリックしてください。

WordPress 2.3になってデフォルトでタグ機能に対応し、このブログで使用しているプラグインもバージョン2.3に対応してきたので、2ヶ月程前にWordPressをバージョンアップしました。
ところが、ブログのトップ(メインインデックス)の各記事のタグが表示されなくて、ちょっと調べてみたのですがよくわからず、年末年始とバタバタとしていたので放置していました。

と、いうことをこの前の記事で書いたのですが、今回はその原因と解決策を…

やはり、WordPress Codex のテンプレートタグの記述に書いてある、“ループ内での使用” というのが気になるので、試しに
[php]
<?php if ( $posts ) : foreach ( $posts as $post ) setup_postdata ($post); ?>
[/php]

[php]
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
[/php]
に変更してみると、予想通りタグが表示されました。

しかし、これでは最新の記事を4つだけ表示させるという条件が無視されてしまいます。
前回も書きましたが、WordPress Japan のトピック

WordPress Japan :: トピックを表示 – ループの書き方が2種類あるのですが、その違いは?

前者は、WordPress が設定したメインループです。内部的にグローバル変数 $wp_query を使っています。
後者は、メインループとは別のループを作るときの書き方です。このコードより前に変数 $posts を設定しているはずです。

とあるように両者ともループタグのはずなんですけどねぇ…

でも、原因はこれなんだろうなぁと思いながら WordPress Codex のループタグの記述をもう一度見ていくと “query_posts” という気になる記述があり、“query_posts” は何かと Template Tags/query posts « WordPress Codex を読むと『ループタグの条件を指定するテンプレートタグ』のようで、ページの中程に “Post & Page Parameters”、下の方に “Offset Parameter” とココで必要なパラメータの記述がありました。
とうことで、“get_posts” の変わりに “query_posts” を使えばいいんじゃないのと
[php]
<?php $posts=get_posts( ‘numberposts=2’ ); ?>
<?php if ($posts) : foreach ($posts as $post) : setup_postdata ($post); ?>
-contents-
<?php endforeach; endif; ?>
-Google AdSense-
<?php $posts=get_posts( ‘offset=2 & numberposts=2’ ); ?>
<?php if ($posts) : foreach ($posts as $post) : setup_postdata ($post); ?>
-contents-
<?php endforeach; endif; ?>
[/php]
という記述を
[php]
<?php query_posts(‘showposts=2’); ?>
<?php if(have_posts()):while(have_posts()):the_post(); ?>
-contents-
<?php endwhile;endif; ?>
-Google AdSense-
<?php query_posts(‘showposts=2 & offset=2’); ?>
<?php if(have_posts()):while(have_posts()):the_post(); ?>
-contents-
<?php endwhile;endif; ?>
[/php]
とすると、以前と同じように上部に最新の2記事を表示し、間に Google AdSense を挟んで下部に3番目と4番目の記事を表示というレイアウトで、タグもちゃんと表示されました。

しかし、どうもすっきりしない。
今回のタグが表示されない原因はループタグだろうと思うのですが、テンプレートタグの “get_posts” が非推奨であるとか廃止になったというアナウンスも無かった気がします。
新機能であるタグ機能のバグなのか、それとも私のループタグの書き方(解釈)が間違っていたのか、よくわかりません。

まっ、釈然としませんが取り敢えずこちらの思うレイアウトを表示できましたので、OK ということで… 😀
あと、タグクラウドとタグアーカイブのページも合わせて修正しましたが、表示は以前とちょっと違います。
タグ用テンプレートタグが基本的なものしかないので、以前と同じというわけにはいきませんでした。
これで、”UTW Theme Compatibility Thing” を利用している “Related tags” 以外は WordPress のタグ機能を使っています。

ちょっと不満のある WordPress のタグ用テンプレートタグについてはまた今度…

スポンサーリンク

  • このエントリーをはてなブックマークに追加

フルスクリーンモードを終了するには Esc キーを押してください。または、ココをクリックしてください。