サポート » 使い方全般 » 404.phpで最新の投稿3件を表示できない。

  • 解決済 chabin

    (@chabin)


    404.phpのサイドバーに、最新の投稿3件を表示したいのですが、
    page.phpでは動いたのですが、404.phpにしたとたん表示できなくなりました。

    原因が分かりません。

    アドバイス頂けます様、宜しくお願い致します。

    <?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
    <div style="width:620px; margin:5px auto; border-bottom:dashed #CCCCCC 1px;">
    
    <div id="single-title">
    <h1><img src="<?php echo get_bloginfo('url') ?>/img/icn_arw_01.gif" hspace="5" align="baseline"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h1>
    </div>
    
    <div id="single-contents">
    <?php the_content(); ?>
    <?php wp_link_pages(array('before' => '<p><strong>Pages:</strong> ', 'after' => '</p>', 'next_or_number' => 'number')); ?>
    </div>
    </div>
    <?php endwhile; ?>
    <?php else : ?>
      <h2 style="font-size:14px;padding:2px;margin:0px;">404:ページが見つかりませんでした。</h2>
      <p style="font-size:14px;padding:2px;margin:0px;">5秒後に自動で、<a href="<?php get_bloginfo('url')?>">トップページ</a>へ移動します。</p>
    <?php endif; ?>
    </div>
    
    <div class="topnavi2">
    <?php // ブログの最新記事 ------------- ?>
    <?
    if (have_posts()) :;
    ?>
    <div style="width:245px; padding:2px; border-bottom:#CCCCCC dashed 1px;">
    <div class="projectB">
    <p class="p-1">新着情報</p>
    <span class="ul-1">
    <?php while (have_posts()) : the_post(); ?>
    <p style="font-size:12px;" class="title_blog"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
    
    <div style="width:220px;margin:5px auto;"><span style="font-size:10px;color:#666666;margin-bottom:1px;padding:2px;"><?php the_time('Y/m/d') ?></span>
    <span class="content_span">
    <?php  the_content_limit2(66); ?>
    </span>
    </div>
    <?php endwhile;?>
    </span>
    </div>
    </div>
    <?php endif; ?>
    <p style="text-align:right; padding:1px; margin:1px 5px; font-size:10px;"><a href="">記事の一覧</a></p>
6件の返信を表示中 - 1 - 6件目 (全6件中)
  • モデレーター gatespace

    (@gatespace)

    if (have_posts()) で投稿があるかどうかを判定するわけですが(Codex参照)、404.phpだから投稿は(当然)ありませんよね?
    (だから、<?php else : ?> のあとに404.phpで表示する内容があるわけで・・・。)

    じゃぁ、どうするの?ってのは日本語Codexの WP_Queryquery_posts あたりを読むと幸せになれます。

    ご提示のコードからは、「最新の投稿3件」というのがどの部分か分かりませんが、
    とりあえず私は以下のようなコードをサイドバーに記述することで最新記事を表示しています。404でも表示されますよ。

    <?php wp_get_archives('type=postbypost&limit=20'); ?>

    モデレーター gatespace

    (@gatespace)

    sysbirdさん>
    フォローありがとうございます。
    自分は提示されたソース内(の下の方)で「ブログの最新記事〜」とあったので、そこで処理しているのかな?と思いました。

    最新投稿記事のタイトルとリンクを(リスト形式で)作成するならば wp_get_archives が簡単です。
    参照先:日本語Codex テンプレートタグ/wp get archives

    もしそうではなくて、タイトルのほかに本文(抜粋)やら投稿サムネイルやらも出したい・・・と言うことであれば、前述の WP_Query をつかってゴニョゴニョする必要があります。
    (いずれにしても、本人がどうしたいか、ですが・・・。)

    404.phpではなく、「サイドバーで記述している「最新の投稿3件」」の部分のコードを具体的に提示してもらえれば、アドバイスしやすいですよ〜 😉

    トピック投稿者 chabin

    (@chabin)

    gatespaceさん、sysbirdさん

    アドバイス有難うございます。

    gatespaceさんのお察しの通り、
    <div class=”topnavi2″>以下がサイドバーとなり。
    「ブログの最新記事〜」の部分で処理し、投稿記事を取得。

    以下を表示。
    ・タイトル
    ・日付
    ・本文

    アドバイス頂いたquery_postsを使い、以下のように修正したところ。
    取得できました。

    <?php // ブログの最新記事 -----------------------------
    //The Query
    query_posts( array('showposts' => 3 ));//最新の投稿3件
    if (have_posts()) :;
    ?>
    <div style="width:245px; padding:2px; border-bottom:#CCCCCC dashed 1px;">
    <div class="projectB">
    <p class="p-1">新着情報</p> 
    
    <span class="ul-1"> 
    
    <?php while (have_posts()) : the_post(); ?>
    <p style="font-size:12px;" class="title_blog"><a>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
    <div style="width:220px;margin:5px auto;">
    <span style="font-size:10px;color:#666666;margin-bottom:1px;padding:2px;"><?php the_time('Y/m/d') ?></span>
    <?php //表示する本文の文字数制限 ?>
    <span class="content_span">
    <?php  the_content_limit2(66); ?>
    </span>
    </div>
    <?php endwhile;?>
    
    </span>
    </div>
    </div>
    <p style="text-align:right; padding:1px; margin:1px 5px; font-size:10px;"><a href="">記事の一覧</a></p>
    <?php endif; ?>
    <?php
    //Reset Query
    wp_reset_query();
    ?>

    404.phpだけでなく、search.phpでも同じ処理をすれば表示できることが分かりました。
    勉強になりました!

    gatespaceさん>
    サムネイルを表示するときは、プラグイン「qf-getthumb」を検討しています。
    現在、何ができるのかを調査中の為。
    他にも、こういう方法があるというのがあれば、教えていただければ幸いです。

    モデレーター gatespace

    (@gatespace)

    解決済みのポストにレスをするのも何ですが、気になった点があったので・・・・・。

    Codexに記述されていますが、query_posts

    query_posts 関数はメインの WordPress ループだけを変更するためのものです。新たなループを作るためのものではありません。メインループの他にループが必要な場合は、別の WP_Query オブジェクトを作ってください。

    とありますので、WP_Queryを使った方がよいですよ〜。
    あと'showposts' => nはposts_per_page の導入により非推奨ですので、そこも変更した方が良いでしょう。

    参考までにこんな感じでどうでしょ?(HTMLのソースは簡略していますので、適当に置き換えてください)

    <?php
    // WP_Queryを使って最新の投稿3件を呼び出す。
    // showpostsは非推奨なのでposts_per_pageを使う。
    $my_query = new WP_Query('posts_per_page=3' );
    
    // 新着情報とかの文字を入れるならこの辺
    
    // ループ開始
    while ($my_query->have_posts()) : $my_query->the_post();
    
    // ループ中の処理(投稿記事のタイトルや内容などなど)
    
    endwhile;
    // ループ終わり
    ?>

    トピック投稿者 chabin

    (@chabin)

    gatespaceさん

    ご丁寧に有難うございました。

    今後のことを考えて、WP_Queryを利用したいと思います。

    アドバイス有難うございました!

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「404.phpで最新の投稿3件を表示できない。」には新たに返信することはできません。