サポート » 使い方全般 » 単一記事とアーカイブが最新記事しか表示されない

  • 解決済 kazu

    (@kazuxtaka)


    お世話になっております。

    投稿記事の表示で問題が起こっております。
    助言いただけると助かります。

    新着情報ページを作成しているのですが、カテゴリーページ以外の表示がうまくいきません。

    現状、1月投稿記事 HPオープンしました。
    3月投稿記事 休業のお知らせ の2件を投稿しています。

    カテゴリーページ:ドメイン/news/,ドメイン/category/news
    のページは2つの記事が順に表示されていて、本文も表示されています。

    各記事タイトルから単一記事ページヘリンクさせているのですが、
    リンク先の表示される記事がどちらも 休業のお知らせ になってしまいます。
    記事のURLは ドメイン/news/記事タイトル.php で、ページタイトルも記事タイトルが表示されていますが、本文が休業のお知らせの記事になってしまいます。

    また、アーカイブページも ドメイン/2015/01,ドメイン/2015/03 では
    どちらも 休業のお知らせ が表示されています。
    ただ、ドメイン/2015 とするとカテゴリーと同じ様に2件分の記事が順に表示されます。

    一旦、別のテーマに変更すると問題なく単一記事等のページが表示されたので、
    テーマが原因ではないかと思うのですが、具体的に原因がわかりません

    singl.php 

    <?php while(have_posts()) : the_post() ?>
    <h2><?php the_title() ?></h2>
    <div class="article_section">
    <?php the_content(); ?>
    </div>
    <div class="article_footer"><p><?php the_category(' '); ?>|<?php the_time('Y.m.d') ?></p></div>
    <?php endwhile ?>

    archive.php

    <?php while(have_posts()) : the_post() ?>
            <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                <div class="article_section">
    <?php the_content() ?>
            </div>
            	<div class="article_footer"><p><?php the_category(' '); ?>|<?php the_time('Y.m.d') ?></p></div>
    
    <?php endwhile ?>
    <div class="section center">
    	<p class="news_nav"><?php posts_nav_link( '&emsp;|&emsp;', '<< 前へ', '次へ >>' ); ?></p>
    </div>

    原因特定のヒントなど御座いましたらお教えいただきたいです。
    よろしくお願い致します。

    (ちなみに、PHP Version 5.2.4 です。)

15件の返信を表示中 - 1 - 15件目 (全18件中)
  • single.phpではなく、singl.phpでしょうか?

    トピック投稿者 kazu

    (@kazuxtaka)

    すみません、eが抜けておりました。
    single.php です。

    問題解決のためのチェックリスト(このリンク先)を参考に、使用しているテーマやプラグイン等を示したほうがアドバイスを得やすいと思いますよ。

    投稿に記載する内容

    どのような条件でどのような問題が見られますか? 以下のポイントを考慮して、正確かつ具体的に記述してください。

    ・WordPress のバージョン
    ・使用しているプラグインとテーマの情報(名称、入手先 URL、バージョン)
    ・PHP、MySQL のバージョン
    ・サーバー環境(ホスティングサービス名、OS、ウェブサーバー等)
    ・ブラウザとそのバージョン
    ・エラーが表示された場合、「XX のようなエラー」ではなく、なるべくエラー文をコピーしてそのまま貼り付けてください

    トピック投稿者 kazu

    (@kazuxtaka)

    アドバイスありがとうございます。
    わかる範囲での詳細は下記です。
    ・WordPress のバージョン
     4.0.1
    ・使用しているプラグインとテーマの情報(名称、入手先 URL、バージョン)
     自作のテーマになります。
    ・PHP、MySQL のバージョン
     PHP Version 5.2.4
     MySQL わかりません
    ・サーバー環境(ホスティングサービス名、OS、ウェブサーバー等)
     自社サーバーを利用しています
    ・ブラウザとそのバージョン
     GoogleChrome、FireFox、IEで同様の記事が表示されています。
    ・エラーが表示された場合、「XX のようなエラー」ではなく、なるべくエラー文をコピーしてそのまま貼り付けてください
     デバッグモードを試してみましたが、エラーは出ていません。

    よろしくお願い致します。

    ・使用しているプラグインとテーマの情報(名称、入手先 URL、バージョン)
     自作のテーマになります。

    プラグインは何も入れていませんか?

    それから、single.php / archive.php の while(have_posts()) より前の部分のコードや、functions.php に書かれているコードが影響している可能性もあります。

    トピック投稿者 kazu

    (@kazuxtaka)

    ご連絡が遅くなりました。
    ちょっと気になったのが、phpのコードでところどころ ; がなくなってしまっているのですが、それが影響するということは有るのでしょうか?
    (↓など)
    <?php while(have_posts()) : the_post() ?>

    すみません。プラグインについて記述を忘れておりました。
    ・Akismet
    ・Configure SMTP
    ・Contact Form 7
    ・Contact Form DB
    ・Flamingo
    ・Google XML Sitemaps
    ・PS Disable Auto Formatting
    ・WP-DBManager
    以上になります。

    単一記事、アーカイブのphpファイルの前部分はhead.phpになるのですが、

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <title><?php wp_title(' | ', true, 'right'); ?><?php bloginfo('name'); ?></title>
    <meta name="keywords" content="" />
    <meta name="description" content="" />
    <link type="text/css" rel="stylesheet" href="<?php bloginfo('template_directory'); ?>/style.css" media="all" />
    
    <?php wp_head(); ?>
    </head>
    <?php if(is_front_page()) : ?>
    <body id="home">
    <?php elseif(is_single() || is_category() || is_archive()): ?>
    <body id="news">
    <?php else: ?>
    <body id="page">
    <?php endif ?>
    
    <div id="header">
    ・・・
    </div>
    <!-- contents -->
    <div id="contents" class="cf">
    <?php get_sidebar() ?>
    <?php if(is_single() || is_category() || is_archive()): ?>
    <h2 class="head"><img src="<?php echo template_directory ?>/img/page/news/h2.jpg" width="650" height="100" alt="新着情報 "/></h2>
    <?php else: ?>
    <h2 class="head"><img src="<?php echo template_directory ?>/img/page/<?php echo get_page_uri($post->ID);?>/h2.jpg" width="650" height="100" alt="<?php single_post_title(); ?> "/></h2>
    <?php endif ?>

    一部htmlコードの部分は省略してあります。
    よろしくお願い致します。

    kazuxtakaさん、プラグインが影響している可能性は無さそうなので、自作テーマの方を調べてみましょう。single.phpとarchive.phpの両方に何か問題がありそうですが、single.phpを先にしましょう。

    各記事タイトルから単一記事ページヘリンクさせているのですが、
    リンク先の表示される記事がどちらも 休業のお知らせ になってしまいます。
    記事のURLは ドメイン/news/記事タイトル.php で、ページタイトルも記事タイトルが表示されていますが、本文が休業のお知らせの記事になってしまいます。

    最初に、念のためプラグインを停止して変化があるか確認してください。

    二番目に「記事のURLは ドメイン/news/記事タイトル.php」ということから、パーマリンク設定がデフォルトではないと思いますので、現在の設定を教えてください。

    三番目に、single.phpの内容を省略しないで示して頂けますか。ペーストビンというサイトを利用して(single.phpの内容を貼り付けて)貼り付けたページのURLを教えてください。ユーザーアカウントを作らなくても利用できます。
    http://pastebin.com

    トピック投稿者 kazu

    (@kazuxtaka)

    お手数をおかけします。

    ・プラグインの有効・無効で改善はしませんでした。

    ・パーマリンク設定は下記になります。
    /%category%/%postname%.php

    ・single.php 記載内容
    http://pastebin.com/eRDk5y7y

    以上です。
    よろしくお願いいたします。

    kazuxtakaさん、single.phpのコードを拝見しました。普通に正しいコードだと思います(セミコロンも)。またプラグインの有効・無効では改善しなかったので、他の原因を探ってみましょう。

    問題点を整理すると、「個別投稿ページのURLが正しいのに投稿のタイトルと本文が食い違う」という問題ですので、自作テーマの functions.php を見直すと原因が見つかるかもしれません。おかしな点がなければ、functions.php の内容を大雑把に教えて頂ければと思います。(コードを丸ごと公開するのは、行数などの点で差し支えがあるかもしれないので。)

    トピック投稿者 kazu

    (@kazuxtaka)

    返信が遅くなりました。
    function.phpの内容は,
    ・投稿用のショートコード作成
    define('template_directory', get_bloginfo('template_directory'));
    から始まるものと
    add_shortcode('template_directory', 'template_dir_func');

    add_shortcode('url', 'get_url_func');

    ・自動形成無効

    ・管理画面の設定(こちら用途が不明の物になります…)

    if(is_admin()) {
      add_action('init', 'admin_register_style_scripts');
      function admin_register_style_scripts() {
        if(is_admin()) {
          wp_register_script('thickbox', null, array('jquery'));
          wp_register_style('thickbox.css', '/'.WPINC.'/js/thickbox/thickbox.css', null, '1.0');
        }
      }
    }

    ・その他

    function custom_the_content($text)
    {
      return wpautop($text, 1);
    }

    用途がわからないまま記載したままのコードがいくつかありました。
    これらが原因ということなのでしょうか。
    ご面倒をおかけします。ご確認いただければ幸いです。

    kazuxtakaさん、役立つコメントをお返しできなくてすみません。
    大まかにはおかしな点が無さそうなので、自作テーマ(コード)の詳細な部分を地道に見直すのが近道だと思います。そう思う理由は、これまで頂いた情報からです:

    • カテゴリーアーカイブ、年のアーカイブ(2015)は2件の投稿を正しく表示する。
    • 3月の「休業のお知らせ」はいつも正しく表示されて、おかしくなるのは1月の「HPオープンしました」だけ。
    • プラグインを停止しても改善しない。
    • テーマは自作テーマ。

    おそらくテーマを Twenty Fifteen 等の公式テーマに変えると「HPオープンしました」も正常に表示されると思うので、それを一度確かめてから、自作テーマのコードを見直してみてください。

    コードの見直し方法は例えば、add_filterやadd_actionを呼び出している部分(自作の関数をフィルターフックやアクションフックに登録している)をいったんコメントアウトして改善するか確認(自作の関数が実行されないようにする訳です)。
    また、もし投稿本文にショートコードを書いているなら、いったんショートコードを消して確かめてみるのも一案だと思います。

    head.php をもう一度見たのですが、get_sidebarでサイドバーを表示させていますね。もしかしてサイドバー(とウィジェット)のコード内で関数 query_posts を使っていませんか?

    トピック投稿者 kazu

    (@kazuxtaka)

    いえ、とんでもないです。調査いただき助かります。
    記事を追加投稿してみましたら状態がかわりました。
    5月 5月の新メニュー1と2(2件) 記事を追加しました。
    すると全単一記事ページが5月メニューの記事が表示されるようになりました。
    1,3月のアーカイブは新メニュー2(最新)が1件
    5月アーカイブは新メニュー1,2が表示されるようになりました。
    アーカイブページの記事の数は正しいようです。
    カテゴリー、年アーカイブは正常です。
    また、今気づいたのですがパンくずリストも設置していて、こちらはホームページをオープンしました。の一番古い記事タイトルが表示されていました。
    どんどんややこしくなっている気がします。

    テーマをデフォルトのものに直すと正常に表示されます。
    function.phpのコメントアウトを試しましたが変化はありませんでした。

    sidebar.php 内の記事抽出部分は、get_postsを使っています。

    <div class="news_menu">
    <h2 class="news_menu">NEW ENTRY</h2>
    <ul class="news_menu">
    <?php $posts = get_posts('posts_per_page=5'); ?>
    <?php foreach($posts as $post) : setup_postdata($post) ?>
    <li><a href="<?php echo get_permalink() ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>
    <h2 class="news_menu">CATEGORY</h2>
    <ul class="news_menu">
    <?php wp_list_categories('title_li='); ?>
    </ul>
    <h2 class="news_menu">ARCHIVE</h2>
    <ul class="news_menu">
    <?php wp_get_archives('wp_get_archives'); ?>
    </ul>
    </div>

    すみません。よろしくお願いします。

    念のため、一度、get_sidebar の呼び出しを削除して確認してみてください。その上で…

    メインクエリの結果を上書きしてしまってから月アーカイブや単一投稿ページを表示しているのは間違いないと思います。ご存知と思いますがメインクエリはWordPress本体が(テンプレートを表示する前に)あらかじめ、対象とする投稿を検索してくれるものです。その検索条件や検索結果を変えてしまえるのは、テーマ内やプラグインのコードです。

    kazuxtakaさん、自作テーマは私の方で試してみることが出来ないので、ご自身で、一行ずつ、見直して頂けませんか。(管理画面の設定で用途不明のコードは無関係だと思います。)

    トピック投稿者 kazu

    (@kazuxtaka)

    ご返信ありがとうございます。
    先ほど、パンくず、単一記事、アーカイブの状態が改善されました!
    sidebar.phpを読み込まないよう設定したら、パンくずも記事も正常に表示されていましたので、やはりsidebar.phpが問題だったようです。
    NEW ENTRYの記事抽出部分

    <?php $posts = get_posts('posts_per_page=5'); ?>
    <?php foreach($posts as $post) : setup_postdata($post) ?>
    <li><a href="<?php echo get_permalink() ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>


    <?php wp_get_archives('type=postbypost&limit=5'); ?>
    に修正しました。

    phpがまだうっすらとしか理解ができていないので、具体的に改善の理由は分からずではあるのですが追々追求していきたいと思います。
    長々とお付き合いいただきありがとうございました。

15件の返信を表示中 - 1 - 15件目 (全18件中)
  • トピック「単一記事とアーカイブが最新記事しか表示されない」には新たに返信することはできません。