サポート » 使い方全般 » ブログ更新情報を全ページに表示したい

  • 解決済 kenjinman

    (@kenjinman)


    ブログ更新情報(最新記事1つのみ)を全ページに表示したいと思い、
    ネット上にあったソースを仕様してみましたが、

    HOMEページには、正しく表示されるのですが、
    他のページには、『更新情報はありません』と表示されてしまいます。
    (条件分岐が働いていることはわかるのですが、
     どの箇所でページを分別しているかが分かりません。)

    PHPド素人なりに、いろいろ試行錯誤してみましたが解決できず、
    こちらでご教授頂けないかと思い、書き込みました。

    以下、ソースです。
    宜しくお願い致します。

    ——————————————————————————–
    <?php query_posts($query_string . ‘showposts=1&cat=0’); ?>
    <?php if (have_posts()) : ?>
    <dl>
    <?php while (have_posts()) : the_post(); ?>
    <dt>[<?php the_time(‘Y-m-d’) ?>]</dt>
    <dd style=”margin-left:0;”> “><?php the_title(); ?></dd>
    <?php endwhile; ?>
    </dl>
    <?php else : ?>
    <p>更新情報はありません</p>
    <?php endif; ?>
    <?php query_posts($query_string . “”); ?>

    ——————————————————————————–

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • query_posts($query_string . 'showposts=1&cat=0');

    これは動かないか、動いてもちゃんとした結果が期待出来ないかな〜と。

    query_posts($query_string . '&showposts=1&cat=0');

    こう書くか、

    query_posts('showposts=1&cat=0');

    こう書かないと。

    これを踏まえた上で、query_posts()の動作ですが、この関数はページのメインクエリを上書きするので、複数使う場合にはメインクエリを退避しないと期待した結果になりません。

    複数ループの解説と例は
    http://wpdocs.sourceforge.jp/The_Loop

    query_posts()の解説は
    http://wpdocs.sourceforge.jp/テンプレートタグ/query_posts

    にありますので、参考にしてみてください。

    showpostsposts_per_page に取って代わられましたので、この点も影響してるかもしれませんね。
    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

    トピック投稿者 kenjinman

    (@kenjinman)

    V.J.Catkickさん

    ご返信、有難うございます。

    ご教授頂いた2文を試してみましたが、エラー表示が出てしまいました。
    他の箇所にも問題があるということでしょうか?

    『複数ループの解説と例は』『query_posts()の解説は』のページの方も、
    現在必死に読んでいますが、まだ理解におよびません。
    引き続き読んでみます。

    私が書いたソースには、『HOME』と『それ以外のページ』を分岐するような
    明確な間違いは記述はされていないということでしょうか?

    トピック投稿者 kenjinman

    (@kenjinman)

    php-webさん

    ご返信有難うございます。

    ご教授いただいたとおりに変更してみました。

    こちらは、エラーは出なかったのですが、
    基の状態と同様に、『HOME』には希望通りの表示がされるのですが、
    『それ以外のページ』には、やはり条件分岐の「更新情報はありません」が
    表示されてしまいます。

    global $wp_query;
    $temp_query = clone $wp_query;
    
    query_posts('posts_per_page=1');
    if( have_posts() ) {
    the_post();
    the_title();
    }
    
    $wp_query = clone $temp_query;

    こんな感じでどうでしょう。(the_title()のところは適当にリンク追加したりして下さい)

    トピック投稿者 kenjinman

    (@kenjinman)

    V.J.Catkickさん

    引き続き有難うございます。
    ご協力頂き助かります。

    早速試してみましたが、ソースがそのまま表示されてしまいました。

    PHPド素人の私がおかしなことをしているのだと思います。

    お教え頂いたソースは、ループ前の下記ソースと入れ替えという認識でよかったでしょうか?

    <?php query_posts($query_string . 'showposts=1&cat=0'); ?>

    宜しくお願い致します。

    あ、先頭に
    <?php

    最後に
    ?>

    が必要です。とりあえず上の2つに先ほどのソースを挟んで、どこかに貼付けてみて動作を確認してみて下さい。

    ※試しに挿入するのは、ページの一番下とかが便利です。上のコードはループの「外」になれけば正しく動作しませんので。

    トピック投稿者 kenjinman

    (@kenjinman)

    V.J.Catkickさん

    度々、有難うございます。

    表示されました!他のページにも。

    ただ、最初のソースに記述していたような、
    【更新日時】改行
    【投稿タイトル(※リンク)】
    が、できません。

    何かを追記すれば良いのだと思い、調べながら試行錯誤しているのですが、
    解決しません。

    ご教授頂いたソースに【更新日時】【投稿タイトル(※リンク)】を
    追加することは可能なのでしょうか?

    宜しくお願い致します。

    <?php
    global $wp_query;
    $temp_query = clone $wp_query;
    
    query_posts('posts_per_page=1');
    if( have_posts() ) {
    the_post();
    the_title(); //この行の部分
    }
    
    $wp_query = clone $temp_query;
    ?>

    上に書いた「この行の部分」は普通のエントリのループと思えばいいです。phpで書くか、わからないのであればソースファイル的にはお世辞にも綺麗とは言えませんが、下記のようにかけば動きます:

    <?php
    global $wp_query;
    $temp_query = clone $wp_query;
    
    query_posts('posts_per_page=1');
    if( have_posts() ) {
    the_post(); ?>
    
    <?php the_title(); ?>
    <!-- 適当に追加 -->
    
    <?php }
    
    $wp_query = clone $temp_query;
    ?>
    トピック投稿者 kenjinman

    (@kenjinman)

    V.J.Catkickさん

    有難うございます!
    うまくいきました!
    (下の段のものでやってみました)

    こんな夜分遅くに対応頂きまして本当に有難うございます。
    本当に助かりました。

    これを機に勉強します。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • トピック「ブログ更新情報を全ページに表示したい」には新たに返信することはできません。