人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【Wordpress・PHP】

Wordpressで特定のカテゴリーに属する子カテゴリーとエントリーの一覧を表示したいと思っています。
画像にもまとめましたが、具体的には以下のような物が出力出来ればと思っています。

どなたかご教授頂けないでしょうか?

<h2>子カテゴリーA</h2>
<p><a href="<?php the_permalink() ?>">子カテゴリーAのエントリー</a></p>
<p><a href="<?php the_permalink() ?>">子カテゴリーAのエントリー</a></p>
<p><a href="<?php the_permalink() ?>">子カテゴリーAのエントリー</a></p>

<h2>子カテゴリーB</h2>
<p><a href="<?php the_permalink() ?>">子カテゴリーBのエントリー</a></p>
<p><a href="<?php the_permalink() ?>">子カテゴリーBのエントリー</a></p>
<p><a href="<?php the_permalink() ?>">子カテゴリーBのエントリー</a></p>

<h2>子カテゴリーC</h2>
<p><a href="<?php the_permalink() ?>">子カテゴリーCのエントリー</a></p>
<p><a href="<?php the_permalink() ?>">子カテゴリーCのエントリー</a></p>
<p><a href="<?php the_permalink() ?>">子カテゴリーCのエントリー</a></p>


1281315663
●拡大する

●質問者: asgi
●カテゴリ:ウェブ制作
✍キーワード:PHP wordpress エントリー カテゴリー 教授
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● tobeoscontinue
●50ポイント
<ul>
<?php
 $args["hierarchical"] = 0;
 $cats = get_categories($args);
 foreach ($cats as $cat) {
 echo "<h2>".$cat->cat_name."</h2>";
 $posts = get_posts("category=".$cat->cat_ID."orderby=post_modified");
 foreach ($posts as $post) :
 setup_postdata($post);
?>
 <p><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<?php endforeach; } ?>
</ul>

http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%9...

特定のカテゴリーIDのみであればget_categoryやget_the_categoryが使えると思います。

ここでは全てのカテゴリーが拾えるようget_categoriesを使いました。引数なしで使うと親と子も拾ってしまいダブルので"hierarchical"を指定してみたところいい感じで拾いましたが希望する動作と違う場合は指定を変えてみたり違うアプローチが必要になると思います。

カテゴリー名をechoで出力しているのはチョット汚いですがWordPressでの関数がわかりませんでしたorz。


カテゴリーIDが入手できたらget_postsで投稿を入手しforeachで繰り返します。投稿数は初期値の5ですが必要ならnumberpostsで指定します。

WordPressのやり方に習ってthe_permalink()やthe_title()を使っていますが

 $posts = get_posts("category=".$cat->cat_ID."orderby=post_modified");
 foreach ($posts as $post) {
 echo "<p><a href=".get_permalink($post->ID).">".$post->post_title."</a></p>";
 }

でも同じように動きました。

◎質問者からの返答

ありがとうございます!!

欲しい形に出力出来ました!

すみません、ちなみに全体ではなくカテゴリーID=1に属している子カテゴリーのみの場合ってどうなるでしょうか?

不勉強で申し訳ございません。もう少しお付き合い頂けると幸いです。

何卒よろしくお願いいたします。


2 ● tobeoscontinue
●50ポイント

一部間違いがありました。

get_posts("category=".$cat->cat_ID."orderby=post_modified");

get_posts("category=".$cat->cat_ID."&orderby=post_modified");

と&が必要でした。

<ul>
<?php
 $cat = get_category(1);
 echo "<h2>".$cat->cat_name."</h2>";
 $posts = get_posts("category=".$cat->cat_ID."&orderby=post_modified");
 foreach ($posts as $post) :
 setup_postdata($post);
?>
 <p><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<?php endforeach; ?>
</ul>

get_categories($args)をget_category(1)に変えて不必要なforeachを削除してみました。

<ul>
<h2><?php echo get_cat_name(1) ?></h2>
<?php
 $posts = get_posts("category=1&orderby=post_modified");
 foreach ($posts as $post) :
 setup_postdata($post);
?>
 <p><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<?php endforeach; ?>
</ul>

あるいはget_category(1)も止めて$cat->cat_nameの代わりにget_cat_name(1)を使ってみました。

◎質問者からの返答

迅速な回答ありがとうございます!!

本当に厚かましくて申し訳ないんですが、

頂いたソースですと「カテゴリー1の見出し」と「カテゴリー1のエントリー」が表示されているのですが、

希望としては「カテゴリー1に属した各子カテゴリーの見出し」と「各子カテゴリーのエントリー」を表示したいと思っています。

ちょうど添付画像のイメージです。こちらの説明が下手で本当に申し訳ないです。

もしお付き合い頂けましたら、もう一度だけご回答お願い頂けないでしょうか?

よろしくお願い申し上げます。


3 ● tobeoscontinue
●50ポイント ベストアンサー
<ul>
<?php
 $args["parent"] = 1;
 $cats = get_categories($args);
 foreach ($cats as $cat) {
 echo "<h2>".$cat->cat_name."</h2>";
 $posts = get_posts("category=".$cat->cat_ID."&orderby=post_modified");
 foreach ($posts as $post) :
 setup_postdata($post);
?>
 <p><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<?php endforeach; }?>
</ul>

だびたびすみません。コメント欄を開いておいてもらったほうがいいようです。

最初に戻ってget_categories()を使います。

$args["parent"] = 1とすることで親のID=1のカテゴリー(カテゴリーID=1の子)のリスト(配列)を入手します。

foreachで各カテゴリーについてget_posts()でカテゴリー1の子のエントリーを入手し、

the_permalink()とthe_title()を表示する。


説明が下手なわけではなく私の勝ってな拡大解釈でカテゴリー(ID=1)というのは例えであって

実際に必要とするのは全てのカテゴリーをリストするのではないかと思っていたからです。

読み込みが足りませんでした。

◎質問者からの返答

ありがとうございました!

求めていた表示を出力することができました。

本当に勉強になりました!

本日は長々とお付き合いいただきありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ