特定のページ(トップページではないページ)に、get_posts()を用いて特定のカテゴリーの記事一覧(タイトル)を表示したいと思っています。


<?php
$posts = get_posts('numberposts=5&category=14');
foreach($lastposts as $post) :
setup_postdata($post);
?>
<li><span class="date"><?php the_time('Y/m/d') ?></span> <a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>

カテゴリーID:14の記事一覧を表示したいとして、このようなコードを考えたのですが、うまくいきません。
結果はどうなるかというと、最新のページ(投稿ではなく)が1件のみ出力されます。
試しにカテゴリー指定を消してみましたが、結果は同じです。

ちなみに、トップページに

<?php
$lastposts = get_posts('numberposts=5');
foreach($lastposts as $post) :
setup_postdata($post);
?>
<li><span class="date"><?php the_time('Y/m/d') ?></span> <a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>

というコードが書いてあって、こちらは正しい結果が出力されています。

どこをどう修正すればよいのかご教示いただければ幸いです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/06/13 19:50:06
  • 終了:2009/06/15 10:58:13

ベストアンサー

id:rouge_2008 No.2

rouge_2008回答回数594ベストアンサー獲得回数3512009/06/15 01:42:45

ポイント100pt

試してみましたが、質問に記載してあるスクリプトで正常に動作しました。

※回答で指摘されている箇所は訂正済み。

記述した場所が問題なのだと思いますが、どこに書いていますか?

<?php if などの条件がどこからどこまでなのか、注意しながら変更してみてください。

例えば、標準添付の「WordPress Default」場合ですが、「sidebar.php」の次の行以降に記述すると表示されるはずです。(※42行目付近にあります。)

<?php wp_list_pages('title_li=<h2>' . __('Pages', 'kubrick') . '</h2>' ); ?>

次の記述を追加(※項目タイトルの<h2>も追加してあります。)

<?php if ( is_page() ) {

?>

<li><h2>記事リスト</h2>

<ul>

<?php

$posts = get_posts('numberposts=5&category=14');

foreach($posts as $post) :

setup_postdata($post);

?>

<li><span class="date"><?php the_time('Y/m/d') ?></span> <a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a></li>

<?php endforeach; ?>

</ul></li>

<?php } ?>


※文字コードをUTF8にして保存してください。(そうしないとh2で指定した日本語部分が文字化けします。)

※Poedit(http://www.poedit.net/)を使用して、ja.mo(「wp-content」→「languages」フォルダ内)を変更した場合は、SJISのままでも大丈夫です。

この場合は、<h2>~</h2>内は、以下のように指定します。

<?php printf(__("Category's Entries List")) ; ?>

※「Category's Entries List」は、自分で好きな文字列を指定してかまいません。ja.po(「wp-content」→「languages」フォルダ内)にここで指定した文字列を追加する必要があります。



上記で解決できない場合はフォローしますので、コメント欄を開けておいてください。

その際にどのテーマを使用しているのかも教えてください。

id:ataca

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

使用テーマはwsc4です。http://wsc.studiobrain.net/4/

ページ内(htmlを記述すべき部分)にこの記述を複数配置し、

categoryIDを変更して使おうとしています。

そのためにrunPHPを使っています。

ご回答いただいたコードをページに貼り付けてみましたが、

出力結果は同じで、最新のページ(投稿ではなく)が1件のみ出力されます。

試しにカテゴリー指定を消してみましたが、結果は同じです。

パーマリンク設定を「数字ベース」にしていることは関係ありますでしょうか。

導入したてて不慣れですので、他に示すべき情報がございましたらご指摘くださいませ。

2009/06/15 02:53:09

その他の回答(1件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/06/13 20:43:34

ポイント35pt

WordPress のスクリプトに関するご質問ですよね。

でしたら、最初の行が間違っています。正しくは下記の通り。


(誤)$posts = get_posts('numberposts=5&category=14');

 ↓

(正)$lastposts = get_posts('numberposts=5&category=14');

id:ataca

そうです。wordpressと書き忘れました。ご指摘感謝です。

さっそく訂正して再度チャレンジしてみました。

…が、結果は一緒です。すみません。

2009/06/13 21:12:26
id:rouge_2008 No.2

rouge_2008回答回数594ベストアンサー獲得回数3512009/06/15 01:42:45ここでベストアンサー

ポイント100pt

試してみましたが、質問に記載してあるスクリプトで正常に動作しました。

※回答で指摘されている箇所は訂正済み。

記述した場所が問題なのだと思いますが、どこに書いていますか?

<?php if などの条件がどこからどこまでなのか、注意しながら変更してみてください。

例えば、標準添付の「WordPress Default」場合ですが、「sidebar.php」の次の行以降に記述すると表示されるはずです。(※42行目付近にあります。)

<?php wp_list_pages('title_li=<h2>' . __('Pages', 'kubrick') . '</h2>' ); ?>

次の記述を追加(※項目タイトルの<h2>も追加してあります。)

<?php if ( is_page() ) {

?>

<li><h2>記事リスト</h2>

<ul>

<?php

$posts = get_posts('numberposts=5&category=14');

foreach($posts as $post) :

setup_postdata($post);

?>

<li><span class="date"><?php the_time('Y/m/d') ?></span> <a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a></li>

<?php endforeach; ?>

</ul></li>

<?php } ?>


※文字コードをUTF8にして保存してください。(そうしないとh2で指定した日本語部分が文字化けします。)

※Poedit(http://www.poedit.net/)を使用して、ja.mo(「wp-content」→「languages」フォルダ内)を変更した場合は、SJISのままでも大丈夫です。

この場合は、<h2>~</h2>内は、以下のように指定します。

<?php printf(__("Category's Entries List")) ; ?>

※「Category's Entries List」は、自分で好きな文字列を指定してかまいません。ja.po(「wp-content」→「languages」フォルダ内)にここで指定した文字列を追加する必要があります。



上記で解決できない場合はフォローしますので、コメント欄を開けておいてください。

その際にどのテーマを使用しているのかも教えてください。

id:ataca

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

使用テーマはwsc4です。http://wsc.studiobrain.net/4/

ページ内(htmlを記述すべき部分)にこの記述を複数配置し、

categoryIDを変更して使おうとしています。

そのためにrunPHPを使っています。

ご回答いただいたコードをページに貼り付けてみましたが、

出力結果は同じで、最新のページ(投稿ではなく)が1件のみ出力されます。

試しにカテゴリー指定を消してみましたが、結果は同じです。

パーマリンク設定を「数字ベース」にしていることは関係ありますでしょうか。

導入したてて不慣れですので、他に示すべき情報がございましたらご指摘くださいませ。

2009/06/15 02:53:09
  • id:rouge_2008
    トップページと同じような感じで、投稿記事ではないページに、それぞれ別個に指定したカテゴリー内の記事リストを表示したいのでしょうか?
    テンプレートを変更した方が良いと思いますので、WSC4のテーマフォルダ内の「page.php」を編集してください。

    <?php comments_template(); ?>
    </div>

    上記(25行目付近)の記述 ~ <?php endwhile; endif; ?>の間に次の記述を追加します。

    <!--トピックス表示START-->
    <ul id="toptopics">
    <?php

    /*
    ここで次のように条件分岐で各ページで表示するカテゴリを指定します。
    if (is_page("ページタイトル")) $cat_id = カテゴリID;
    次はそれぞれ、「紹介」というページではid1のカテゴリを、「What's New」というページでid2のカテゴリを表示させるための指定です。(自分の環境に合わせて変更してください。)
    */
    if (is_page("紹介")) $cat_id = 1;
    if (is_page("What's New")) $cat_id = 2;
    $list = "numberposts=5&category=".$cat_id;
    $posts = get_posts($list);
    foreach($posts as $post) :
    setup_postdata($post);
    ?>
    <li><span class="date"><?php the_time('Y/m/d') ?></span> <a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>
    <!--トピックス表示END-->

    //次の記述は元からあります。
    <?php endwhile; endif; ?>
    </div>


    これで表示されると思います。
    各パーマリンク設定をすべて試してはいませんが、数字ベースでは大丈夫でした。
  • id:rouge_2008
    書き忘れです・・・
    条件指定はページタイトルだけでなく、ページのIDで指定することも可能です。
    詳細は条件タグ(Conditional Tag)の「WordPress ページ」の項目を参照してください。

    http://wpdocs.sourceforge.jp/Conditional_Tags#WordPress_.E3.83.9A.E3.83.BC.E3.82.B8

  • id:ataca
    カミオソウイチロウ 2009/06/15 07:54:18
    >>rouge_2008 さま

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

    おっしゃるとおり、投稿記事ではないページに、それぞれ別個に指定したカテゴリー内の記事リストを表示したいのです。
    具体的には「活動実績」というページを作り、その“一つの”ページの中に、別個に指定したカテゴリー内の記事リストを“複数”配置したいと望んでいます。

    ご教示いただいたコード修正は、“複数の”ページの中に、別個に指定したカテゴリー内の記事リストを“一つ”配置する場合だと理解してよろしいでしょうか。

    お手数をおかけいたしまして恐縮ですが、再度ご教示いただければ幸いです。
    何卒よろしくお願いいたします!
  • id:rouge_2008
    複数のカテゴリー内の記事リストを表示したい場合は、次のようにしてみてください。(※記述する位置は変わりません。)

    <!--トピックス表示START-->
    <ul id="toptopics">
    <?php

    /*
    「活動実績」というページで、カテゴリid1と2と3の3つのカテゴリの記事リストを表示する場合です。
    さらに別のページではカテゴリid4と5の2つのカテゴリの記事リストを表示したいという場合は、次の行も追加しておきます。
    if (is_page("別のページのタイトル")) {$cat_id = 4; $cat_id2 = 5;}
    */
    if (is_page("活動実績")) {$cat_id = 1; $cat_id2 = 3; $cat_id3 = 3;}

    $list = "numberposts=5&category=".$cat_id;
    $posts = get_posts($list);
    foreach($posts as $post) :
    setup_postdata($post);
    ?>
    <li><span class="date"><?php the_time('Y/m/d') ?></span> <a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>
    <?php
    if ($cat_id2){
    ?>
    <ul id="toptopics">
    <?php
    $list2 = $list = "numberposts=5&category=".$cat_id2;
    $posts = get_posts($list2);
    foreach($posts as $post) :
    setup_postdata($post);
    ?>
    <li><span class="date"><?php the_time('Y/m/d') ?></span> <a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>
    <? } ?>
    <?php
    if ($cat_id3){
    ?>
    <ul id="toptopics">
    <?php
    $list3 = $list = "numberposts=5&category=".$cat_id3;
    $posts = get_posts($list3);
    foreach($posts as $post) :
    setup_postdata($post);
    ?>
    <li><span class="date"><?php the_time('Y/m/d') ?></span> <a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>
    <? } ?>
    <!--トピックス表示END-->


    ※4つ以上のカテゴリの記事リストを表示したい場合は、同じように一つのカテゴリにつき、条件分岐の所で$cat_id4 = 7;のように$cat_id数字の変数の指定を増やして、次の部分を<!--トピックス表示END-->の直前の行(<? } ?>の後ろ)に追加します。
    ※逆に2つでいい場合は、次の部分を削除してください。

    <?php
    if ($cat_id3){
    ~省略~
    <?php endforeach; ?>
    </ul>
    <? } ?>


    ※$cat_id数字と$list数字の数字は、追加分にあわせて変更します。
    ※<ul id="toptopics">とすべて同じIDを指定していますが、別のIDを指定しCSSで指定すると、トピックタイトルの背景画像を変更することも可能です。(テーマフォルダ内の「style.css」でCSSを指定します。画像は自分で作成する必要があります。)
  • id:ataca
    カミオソウイチロウ 2009/06/15 09:24:09
    >>rouge_2008 さま

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

    このリストをページ内の任意の場所に配置しようとした場合には、どうすればよろしいのでしょうか。

    具体的にはたとえば

    <h2>見出し1</h2>
    [$cat_id = 1 のリスト]
    <h2>見出し2</h2>
    [$cat_id = 2 のリスト]
    <h2>見出し3</h2>
    [$cat_id = 1 のリスト]

    としたい場合です。

    この場合は、page.phpに
    if (is_page("活動実績"))
    を書いた後に、出力したいhtmlも含めて記述することになるのでしょうか。
    あるいはpage.phpをもとに「活動実績」ページ用の新しいページテンプレートを自作してアップロードするとか。

    二番目の方法がよい気がしてきたので、トライしてみます。

    本当にありがとうございます!
  • id:ataca
    カミオソウイチロウ 2009/06/15 10:57:32
    できました!
    ありがとうございました!
  • id:rouge_2008
    見出しをつけるだけでしたら、それぞれ<ul id="toptopics">の前に見出しタグ(<h3>カテゴリーリストタイトル</h3>)を記述すれば良いです。

    リスト表示用に別ファイルを作成してから、次の記述を任意の場所に追加して表示することも可能です。
    if (is_page("活動実績")) {
    include (TEMPLATEPATH . '/entrylist.php');
    } ?>

    ※「entrylist.php」という名前でテーマフォルダ内に保存した場合です。
    ※別ファイルには、<!--トピックス表示START-->から<!--トピックス表示END-->までをすべて記述します。
    ※ただし、記事の途中に表示させることはできない上に場所が限られているので、二番目の方法にした方が良いかもしれませんね。(二番目の方法でも、ページの内容は独自に作成したテンプレート内に記述する必要がありますが・・・)

    活動実績ページ用のテンプレートを作成した場合は、次の記事で紹介されている方法で適用する事ができます。

    http://www.travelogue.jp/blog/archives/508.html#a50806
  • id:ataca
    カミオソウイチロウ 2009/06/15 11:01:11
    >>rouge_2008 さま

    新しいページテンプレートを自作し、適用することで対応できました。
    テンプレートの中に記述したコードは、rouge_2008 さまからいただいたものです。

    おかげで完成することができました!
    本当に感謝です!ありがとうございます!
  • id:rouge_2008
    こちらこそ・・・
    たくさんのポイントといるかをありがとうございました。(^-^)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません