kikuzoさん、こんにちは。
記載いただいたコード自体には、おかしいところはありません。
ただし、記載いただいたコードより前にquery_postsを実行していたりすると、aに該当しうなくなる可能性がありますが、いかがでしょうか。
jim912さん、書き込みありがとうございます。
確かにこのコードより前に下記のようなquery_postsを実行しています。
<?php query_posts(‘pagename=info’); ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<h2 class=”title”><?php the_title(); ?></h2>
<?php the_content(); ?>
<?php endwhile; ?>
<?php endif; ?>
ためしに削除してみると、きちんとaが返って来ました。
ということは、このようなsidebarの振り分け方法は不可能、ということでしょうか。
あと、なぜquery_postsを実行すると振り分けが出来なくなるのか疑問です。jim912さんのお時間が許す時に、この点について少し教えていただけないでしょうか。
お忙しいと思いますが、どうぞよろしくお願いします。
kikuzoさん、こんにちは。
query_postsを使った時に振り分けができなくなる点については、下記スレッドを参照ください。(少々長いですが。。。)
検索結果を記事中に表示したい
回避させるには、query_postsではなくget_postsを使えば解決します、ただし、get_postsを使った場合は、記事のループ部分の記述が少々変わりますので留意ください。
<?php query_posts(‘pagename=info’); ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<h2 class=”title”><?php the_title(); ?></h2>
<?php the_content(); ?>
<?php endwhile; ?>
<?php endif; ?>
に続けて
wp_reset_query();
とすると query_posts の実行前の状態に戻ります。
sidebar の振り分けは sidebar.php 内にまとめるとすっきりかもです。
if(is_category(’50’) || is_category(’51’)){
include(TEMPLATEPATH . ‘/sidebar-2.php’);
} else {
include(TEMPLATEPATH . ‘/sidebar-default.php’);
}
kzさん、書き込みありがとうございます。
wp_reset_query();を使う方法を試してみたところ、queryの指定が解除され”a”が返ってくるようになりました。さらに、wp_reset_query();についてネットで調べて勉強させていただきました。有益な情報をありがとうございました!
sidebarについてのアイデアも大変参考になります。ありがとうございます。
jim912さんから教えていただいた「query_postsではなくget_postsを使えば解決」という方法も使えるようになろうと、この前からフォーラムの過去記事の中をいったりきたりしています。が、、お見せしてご意見を仰ぐほどソースがまとまりません。自分には「get_posts」というのはなかなか手ごわいです・・・。がんばります。
get_posts を使うなら以下のどちらか。
plan A:
<?php
$myposts = get_posts('pagename=info');
foreach($myposts as $post) :
setup_postdata($post);
?>
<h2 class="title"><?php the_title(); ?></h2>
<?php
the_content();
endforeach;
wp_reset_query();
?>
the_〜 を使おうとすると、
setup_postdata を呼ぶか(the_content 使用時に必要)
$post を global にして (the_title 程度ならこちらでOK)
元々のクエリを破壊しないといけないので
結局 query_posts 使用時のように wp_reset_query で元に戻す必要があります。
plan B:
<?php
$myposts = get_posts('pagename=info');
foreach($myposts as $mypost) :
?>
<h2 class="title"><?php echo $mypost->post_title; ?></h2>
<?php
echo $mypost->post_content;
endforeach;
?>
get_posts で global な $posts・$post や the_〜 のタグを使わず
$mypost->〜 のようにwp_posts のフィールド値を使うようにすれば
元々のクエリが破壊されません。
個人的には get_posts が必要になる場面がないので
query_posts だけ使ってれば幸せです。
$post を global にして (the_title 程度ならこちらでOK)
元々のクエリを破壊しないといけないので
結局 query_posts 使用時のように wp_reset_query で元に戻す必要があります。
$postは、the_post関数実行時に上書きされる一時的なオブジェクトでしかありませんから、クエリが破壊というのは適切ではありません。
ループが独立しているのであれば、get_postsは本来のソースになんら影響なく用いることができますし、wp_reset_queryを使う必要もありません。
ループが独立しているのであれば、get_postsは本来のソースになんら影響なく用いる
後世のために、これ!という書き方を例示していただけると、
不幸になる人が減って良い感じです。
kzさん、書き込みありがとうございます。
さっそくplanA,Bを試してみたところ、きちんと「a」が返ってきました。planA,B、さらに「wp_reset_query();」を使う方法と、3つも詳細に教えていただいて本当にありがとうございます。いろいろなアプローチ方法があるのだなと感心しました!
jim912さん、書き込みありがとうございます。
「ループが独立しているのであれば、wp_reset_queryを使う必要もありません。」とのお話、「get_posts」の使い方がなかなか手ごわく思うようになりませんが、大変勉強になります。ありがとうございます。