サポート » テーマ » 特定のカテゴリで投稿した記事をタイトルだけのリンク付きでリスト表示

  • 解決済 kapiolastnight

    (@kapiolastnight)


    固定ページに特定のカテゴリで投稿した記事をタイトルだけのリンク付きでリスト表示したのですが、固定ページのフッター部分に投稿記事のタイトルと本文が表示されてしまいます。
    下記が固定ページに読み込ませているphpです。

    $pag = get_query_var(‘paged’);
    $blog_posts = query_posts(‘category_name=カテゴリ名&posts_per_page=5&paged=’.$pag);
    foreach($blog_posts as $post): ?>
    ID); ?>”><?php echo $post->post_title; ?>

    下に表示される投稿記事の数はposts_per_page=の数値に連動しています。
    調べていると、content.phpに問題がありそうなところまでは分かったのですが、初心者なのでそれ以上は分かりませんでした。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • TwentyTwelveを使用しています。
    投稿記事が表示される部分の編集を行いたいです。

    発生している状況について情報が不足していてコメントしづらいですね。下記の点についてもう少し情報を頂けませんか。

    • PHPコードが崩れてしまっているので、このフォーラムへ書くときの注意点を参考にして、もう一度PHPコードを書いてください。注意点は 質問ルール の「フォーラムを利用しやすくするための配慮」の箇条書き一点目にあります。
    • 固定ページに読み込ませているPHPというのは、WordPress管理画面の固定ページの編集画面から入力したのですか。それとも、外観 » テーマ編集 のメニューでテーマの content.php ファイルを編集して書き込んだのでしょうか。

    ルールを最後まで読んでいませんでした。すみませんでした。

    PHPのコードを投稿しました。
    http://pastebin.com/8NfG4ezN

    PHPは新規で作成したものをサーバにUPしました。
    function.phpに、固定ページでPHPを出力するためのコードと、固定ページにタグを設置できるようにするコードを加えています。
    出力するコードは、固定ページの本文に書いています。
    [myphp file=’PHPの名前’]

    function.phpのコードです。
    http://pastebin.com/AdWjSmhK

    それぞれの固定ページに専用のPHPを読み込ませて、投稿記事のカテゴリで振り分けています。

    問題になっているのは、固定ページの投稿リストの下に、
    カテゴライズされた投稿記事のタイトル・本文・編集・表示が順番にされている点です。
    next_posts_linkも設置できないので邪魔になっています。
    これを表示させたくありません。

    問題の部分のクラスは下記です。divクラスのsite-contentの中です。
    <header class=”entry-header”>
    <div class=”entry-content”>

    情報足りていますでしょうか?宜しくお願いします。

    固定ページへ読み込ませたphpの中で、query_posts を実行した後に元のクエリを復元していないことが原因です。ですので対策は下記のNo.1がお勧めです。No.2でも直りますが、query_posts はどうしても使わなければならない時だけ使うのがよいです。

    1. query_posts の代わりに get_posts を使って、元のクエリを書き換えないようにする。
    2. endforeach の後に wp_reset_query を実行して元のクエリを復元する。

    Twenty Twelveの固定ページ用テンプレートである page.php の中にループ(while have_postsendwhile)がありますが、このループは目的の固定ページを表示するために実行されます。どの固定ページを対象とするかは、page.phpを実行する前にWordPressの本体側で予めクエリが実行済みであり、今回は kapiolastnight さんが作った固定ページが選ばれています。にもかかわらず page.php自体の中で query_posts を実行したので、固定ページを対象としていたクエリが上書きされて、page.phpが投稿ページを表示してしまうという訳です。

    詳しくは、日本語Codexの query_posts の「説明」セクションをご覧になってください。

    2番で魔法のように直りました!!
    ありがとうございました。

    先ほどのコメントに書きましたが
    kapiolastnight さんが今回やりたいことを実現するのに
    get_posts ではなく query_posts を使うのは避けたほうがよいですよ。
    今回のようなトラブルを繰り返さないために
    No.2の対策ではなく、get_posts に置き換える方をお勧めします。

    了解です。解決済みにしました。

    query_posts を get_posts にしたら next_posts_link が表示されなくなってしまいました。
    ひとまず next_posts_link の下に wp_reset_query を設置した次第です。
    どうして表示されないのでしょうか。。

    kapiolastnightさん
    ページングを考慮していませんでした。すみません。
    next_posts_linkはメインクエリ(元のクエリ。query_postsで上書きしたクエリ)の結果を参照して動作するので、get_postsに置き換えた場合は狙ったように表示されません。
    今回やりたいこと(ページング含む)に対しては、query_postsとwp_reset_queryの組み合わせに戻して下さい。失礼しました。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「特定のカテゴリで投稿した記事をタイトルだけのリンク付きでリスト表示」には新たに返信することはできません。