query_posts の使い方が間違ってます。
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts
<?php
// クエリ
query_posts( $args );
// ループ
if ( have_posts() ) :
while ( have_posts() ) : the_post();
echo '<li>';
the_title();
echo '</li>';
endwhile;
else:
endif;
// クエリをリセット
wp_reset_query();
?>
Codexのページでも書いてますが、サイドバーなどで利用する場合は、get_posts あるいは WP_Query を使った方が良いです。
http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Query
>gatespaceさん
ご助言ありがとうございます!
なんと!
query_postsをサイドバーで使うのは間違いだったのですか…知らなかった…
これはちゃんとした書き方を学ぶ必要がありますね!
とりあずget_postsを使って投稿記事を引っ張ってくる書き方を覚えます!
そしてget_postsを使えば目的のコードと干渉を起こさないと考えていいのでしょうか?
検証しないとわからないことでしたらすみません…。
(なぜquery_postsの記述で干渉しているのかもわからない…)
でもやるべきことが見えたので非常に助かりました!ありがとうございます!
get_postsを使ってみましたが、できませんでした!
(´;д;`)
また何か間違えてると思います…。
get_postsで特定のカテゴリ投稿記事を拾ってくるコード、
その次に1レス目に記述した子カテゴリを拾ってくるコードを記入しました。
sidebar.phpの状態としては以下の通りになってます。
1.特定のカテゴリ投稿記事を表示するコード
<?php
$posts = get_posts('numberposts=20&category=12');
global $post;
?>
<?php
if($posts): foreach($posts as $post): setup_postdata($post); ?>
<a>"><?php the_title(); ?></a>
<?php endforeach; endif;
?>
2.上記のコードの次に記述されている子カテゴリを表示させるコード
<?php
//$catに最上位カテゴリの情報を入れる
$cat = get_category($cat);
while ( $cat->parent > 0 )
$cat = get_category( $cat->parent );
//親カテゴリIDを取得
$parentID = attribute_escape($cat->cat_ID);
//子カテゴリIDを全て取得し、配列に入れる
$catChildren = get_category_children($parentID);
$catIDs = explode('/',$catChildren);
array_shift($catIDs);
sort ($catIDs);
?>
<ul id="catChild">
<?php
//ループしてHTMLを作成
for($i=0; $i<count($catIDs); $i++) {
$cats=get_category($catIDs[$i]);
?>
<li>
<a href="<?php echo get_category_link($catIDs[$i]); ?>">
<?php echo get_catname($catIDs[$i]); ?></a>
</li>
<?php } ?>
</ul>
これをまた前後変えると2のコードも1のコードも動きだしますが、1が前だと動きません!!全く情報を拾ってくれません…
サイドバーはget_postsを使ってもダメなんでしょうか?
どなたか助けてくださーい。o゚(p´⌒`q)゚o。
あ!
sidebar.phpの中に入れてたショートコードをいくつか消して試してたら表示されるようになりました。
ヤッ━ヾ(*´∀)(∀`*)ノ゙━ッタ!!
お騒がせしてすみませんでしたー!
上のコードの並び順で問題なく表示されました!!
gatespaceさん、改めましてありがとうございました!助かりました!!
あと別件ですが上の2のコードを特定のカテゴリだけ除外させようと
11行目の
$catChildren = get_category_children($parentID);
$catChildren = get_category_children($parentID,-100,-150);
などと書き換えてみてるのですがこれだとID100や150のカテゴリを除外するどころか
動作しなくなってしまいました…
$parentIDが子カテゴリのID情報だとはわかっているのですが、ここからID100とID150のカテゴリだけ除外する方法がわかりません。
こちらも解決しました!
まだ作業中なのでまたまとめておきます、一旦解決にしておきます!!
ありがとうございました!
get_posts であってもクエリはリセットしないとダメですよ。
あとget_category_children はWordPress 2.8 で非推奨になってます。
子カテゴリの数が両手両足の指で数え切れないくらいありますのでなんとか自動で表示させたく思っております。
この部分の具体像が見えません。
最上位のカテゴリだけリストで表示させたいのですか?
そうであれば wp_list_categories をつかって 最上位のみのカテゴリーを表示させた方が楽です。
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/wp_list_categories
>gatespaceさん
ご返信に気づかず申し訳ありません!
お返事ありがとうございます。
>get_posts であってもクエリはリセットしないとダメですよ。
あとget_category_children はWordPress 2.8 で非推奨になってます。
なるほどなるほど…全然知りませんでした、すごい勉強になります。
クエリのリセットと推奨・非推奨は気をつけていきたいと思います。
>この部分の具体像が見えません。
最上位のカテゴリだけリストで表示させたいのですか?
えっと、今回は例で書きますとA>B>Cと親>子>孫関係のカテゴリがありまして、
子も孫もカテゴリ数が大量にありました。
そこで親カテゴリのカテゴリページのときに、孫カテゴリを表示せずに子カテゴリのみの一覧を表示させたかったのです。孫カテゴリも含めて表示させると大変なことになるので…。
ですが、さらにその状態でこのカテゴリいらないなあと思うものを一覧から除外して非表示にさせたかったのです。
説明がわかりにくくてすみません。
ですが今は希望通りの動作ができているのでとても助かりました。
感謝です!ありがとうございました!