サポート » プラグイン » 固定ページに表示したPage Naviの表示がおかしいです。

  • 解決済 h-pine-h

    (@h-pine-h)


    固定ページに投稿記事を表示し、それをプラグインのPage Naviを使って表示することには成功しました。
    しかし、2点おかしなことがあります。
    1。5ページずつでページンングされるように設定したので、テスト1〜6の投稿をしたのですが、固定ページに表示されている投稿は、テスト2〜6になっています。
    2。2ページ目に移行すると、なぜか他の固定ページであり、トップページに設定してあるページが表示されてしまいます。ページのアドレスはトップのURLではなく、●●(ページングを設定したページのURL/page/2/と表示されています。

    投稿記事を表示させた固定ページのソースを提示致します。

    <div id="contents_w">
                        <div id="main">
                     <?php $paged = get_query_var('paged'); ?>
    <?php query_posts("posts_per_page=5&paged=$paged"); ?>
                   <?php if (have_posts()) : ?>
                        <?php while (have_posts()) : the_post(); ?>
                             <div class="post">
                     <?php the_content(); ?>
                             </div><!-- /.post -->
    
                        <?php endwhile; ?>
    	<?php endif; ?>

    </div><!– /#main –>
    <?php wp_pagenavi(); ?>
    </div>
    この上下にヘッダーとフッターです。何が原因なのでしょうか?
    他に必要な情報はありますでしょうか。

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • おそらく、

    <?php query_posts(“posts_per_page=5&paged=$paged”); ?>

    で設定されている5件の数より管理画面の[設定]→[表示設定]→「1ページに表示する最大投稿数」の件数のほうが大きい設定にされているのだと思います。

    ネットにある解決策だと管理画面の「1ページに表示する最大投稿数」の数を「1」最小の数にすると動作するようですが、そうなると他のアーカイブページも1件表示になってしまい、アーカイブのテンプレートが複数ある場合、修正作業が大変かと思います。

    ページネーションをさせたい場合かつ、表示件数を管理画面の「1ページに表示する最大投稿数」で設定した数とは異なる件数にしたい場合は、以下のトピックスでjim912さんが記載されているように「posts_per_page」を利用されるのが良いかと思います。

    http://ja.forums.wordpress.org/topic/11147?replies=15

    トピック投稿者 h-pine-h

    (@h-pine-h)

    >tkc49さん
    ご指摘されたページのとおりにソースを書きましたら、PAgeNavi,投稿記事の表示共に消えてしまったので、ひとまず以前のソースに戻している状態です。

    試してみて表示が消えてしまったのは以下のソースです。

    <div id="contents_w">
                        <div id="main">
                        <?php $paged = (get_query_var('page'))?get_query_var('page'):1; ?>
                     <?php $args = array(
     'post_type' => array('antiaging','house','marriage','family','town','try'),
    'paged' => $paged,
    'posts_per_page'=>8
    ); ?>
    <?php query_posts($args); ?>
    </div><!-- /#main -->
    <?php wp_pagenavi(); ?>
    </div>
    <?php get_footer(); ?>

    ところで、基本的なことが理解できていないのかもしれませんが、複数の投稿記事を固定ページに表示させるにはarchive.phpが必要でしょうか?
    はじめに質問した時点ではなくとも(表示はおかしいものの)複数の投稿記事が固定ページトップだけには表示されていたのですが、必要なのかな?と思い、調べてコピペしたものを以下のように作成しました。

    <div id="contents">
    <h2><?php wp_title(); ?></h2>
    <?php if ( have_posts()): ?>
    <ul>
    <?php while ( have_posts() ) : the_post(); ?>
    <li>
    <p>
    <span>日付:<a href="<?php the_permalink(); ?>"><time datetime="<?php the_time('y-m-d'); ?>"><?php the_time( get_option('date_format') ); ?></a></span>
    </p>
    <a href="<?php the_permalink(); ?>">
    <?php if ( has_post_thumbnail() ) :
    the_post_thumbnail('thumbnail');
    else :
    echo '<img src="';
    bloginfo( 'template_url' );
    echo '/images/the_post_thumbnail_default.png" alt="デフォルト画像" />';
    endif; ?>
    </a>
    <h3><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
    <p>
    <?php the_excerpt(); ?>
    </p>
    <p>
    <span>カテゴリー:<?php the_category(','); ?></span>
    <span><?php the_tags(); ?></span>
    </p>
    </li>
    <?php endwhile; ?>
    </ul>
    <?php endif; ?>
    </div>

    archive.phpを作成しても、以前のソースの方で試しても、全く同じ表示でした。

    初心者なのですが、勉強のためにオリジナルでテーマを作成していて、その都度必要なファイルを作成しています。何が原因なのでしょうか?

    トピック投稿者 h-pine-h

    (@h-pine-h)

    サイトを検索して色々試したのですが、やはり問題が残るのは、2ページ目以降のリンク先に飛ぶと、トップの表示になってしまうということです。アドレスは、/page2/となっています。
    現在の固定ページのソースです。

    <?php query_posts('posts_per_page=5&paged='.$paged); ?>
    <ul>
    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    <li><?php the_content(); ?></li>
    <?php endwhile; endif; ?>
    </ul>
    <?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>
    <?php wp_reset_query(); ?>

    archive.php はアーカイブで使うのに、こんなコードがまじっていていいのでしょうか? 普通に固定ページ用のテンプレート page.php または page-なんとか.php の方がよくないですかねぇ。

    query_posts() については、新旧さまざなページが検索でヒットすると思いますが、記事の日付に注意されるのがよいと思います。WP-PageNavi についても同様です。

    それはさておき、wp_pagenavi() は引数にクエリオブジェクトをとれますので、下のように、WP_Query を使うと、どうなりますか?

    <?php
    $args = array(
        'posts_per_page' => 5,
        'paged' => get_query_var('paged'),
    );
    $the_query = new WP_Query($args);
    ?>
    <ul>
    <?php if($the_query->have_posts()): ?>
    <?php while($the_query->have_posts()): $the_query->the_post(); ?>
    <li><?php the_content(); ?></li>
    <?php endwhile; endif; ?>
    </ul>
    <?php if(function_exists('wp_pagenavi')) { wp_pagenavi(array('query' => $the_query)); } ?>
    <?php wp_reset_postdata(); ?>

    カスタム投稿タイプが複数あって、それを1ページに表示したいとか、固定ページ自体のコンテンツがあって、それに加えて投稿リストを表示したいとかいうのでなければ、pre_get_posts フックを使った方が簡単です。

    トピック投稿者 h-pine-h

    (@h-pine-h)

    >kjmtshさん
    回答ありがとうございます。
    まず、わたしの説明が下手なため、誤解を生んでしまいましたが、一つ前の書き込みに書いたソースは、page-works.phpという固定ページに書いたソースです。

    >固定ページ自体のコンテンツがあって、それに加えて投稿リストを表示したいとかいうのでなければ、
    固定ページ自体のコンテンツがあって、それに加えて投稿リストを表示したいと思っています。もちろんPagenaviも。

    上記のソースを使わせて頂きましたが、やはり同じように固定ページのトップには投稿記事とページナビが表示されるのですが、2ページ目以降のリンクに飛ぶと、トップページの表示になってしまいます。(URLはpage/2/のようになっています)

    page-works.phpではなく、他のphpのページの問題も考えられるのでしょうか…?

    実は、h-pine-h さんの一つ前の投稿でお示しになったコードでも動作するはずなのですが、2つ別の方法で、同じ結果ということは、どこか別に原因があるかもしれません。

    念のため、

    echo $the_query->found_posts . '<br />';
    echo $the_query->query_vars['posts_per_page'] . '<br />';
    echo $the_query->max_num_pages . '<br />';

    を追加して、出力を教えていただけますか? あと、パーマリンクの設定も知りたいです。

    トピック投稿者 h-pine-h

    (@h-pine-h)

    >kjmsthさん
    ご親切にありがとうございます。
    出力は、上から11、5、3となります。

    パーマリンクの設定は投稿名となっていて、この固定ページは●●/worksとなっています。

    パーマリンクの設定、今まで意識していなかったのですが、変えた方が宜しいでしょうか?

    数値は、こんな意味です。検索でヒットした投稿数が 11 個、1 ページに表示する投稿数は 5 個、だから、11 割る 5 は、2あまり1、切り上げて 3 ページ分、という意味です。これ合ってますよね?

    WordPress はちゃんと正しい計算をして、このクエリは 3 ページ目までありますよ、という情報を持っています。たぶん、h-pine-h さんのコードでも同じ値になるはずです。

    パーマリンクはそれでも、私のところでちゃんと動いていますので、大丈夫のようです。でも、原因がぜんぜんわかりませんねぇ。思いつきですが、「超簡単テンプレート」にして試してみましょうか?

    <?php
    /**
     * Template Name: Very Simple Page
     *
     */
     ?>
     <html lang="ja">
     <head>
     <?php wp_head();?>
     </head>
     <body>
    
    <?php if (have_posts()) :?>
    <?php while (have_posts()) : the_post(); ?>
    <?php the_title(); ?>
    <?php endwhile; endif; ?>
    
    <?php
    $args = array(
        'posts_per_page' => 5,
        'paged' => get_query_var('paged');
    );
    $the_query = new WP_Query($args);
    if ($the_query->have_posts()) {
        while ($the_query->have_posts()) {
            $the_query->the_post();
            the_title();
        }
    }
    wp_pagenvi(array('query' => $the_query));
    wp_reset_postdata();
    ?>
    
    <?php wp_footer();?>
     </body>
     </html>

    これを固定ページのテンプレートとしてみると、どうでしょう? もうあてずっぽうですが…

    トピック投稿者 h-pine-h

    (@h-pine-h)

    >kjmsthさん
    テストとして、ご用意して頂いたテンプレートを(titleをcontentに変更しただけのものを)一度使用すると、ページング機能が使えましたので、page-works.phpに流用しました。
    結果、こちらでも2ページ目以降もページ内容が表示されました!
    今までも「エラー」は出ていなかったので、ご用意して頂いたソースは適用できていたと思うのですが、不思議ですね…とにかくありがとうございました!

    page-works.phpの最終的ソースは次のとおりです。

    <?php
    /*
    Template Name: works
    */
    ?>
    <?php get_header(); ?>
    <img id="sub_title" src="<?php echo get_template_directory_uri(); ?>/images/works_title.jpg"  alt="works 制作実績">
    <!-- Contents -->
                  <div id="contents_w">
    
     <?php if (have_posts()) :?>
    <?php while (have_posts()) : the_post(); ?>
    <?php the_content(); ?>
    <?php endwhile; endif; ?>
    
    <?php
    $args = array(
    'posts_per_page' => 5,
    'paged' => get_query_var('paged'),
    );
    $the_query = new WP_Query($args);
    if ($the_query->have_posts()) {
        while ($the_query->have_posts()) {
            $the_query->the_post();
            the_content();
        }
    }
    
    wp_pagenavi(array('query' => $the_query));
    wp_reset_postdata();
    ?>
    
    </div>
    <?php get_footer(); ?>
    トピック投稿者 h-pine-h

    (@h-pine-h)

    最後までありがとうございました!

    解決済みになっちゃったので、つなげるのは申し訳ないですが…

    原因はたぶん、メインループが介入していると思うんですよね。wp_pagenavi() 関数がメインループのオブジェクトを参照していると、固定ページは2ページ目がありませんから、index.php に飛ばされるということだと思うんです。「超簡単テンプレート」はそれをきっちり分けるようにしたものです。

    ウェブを検索すると、WP-PageNavi の「バグ」という報告も目にするのですが、使い方が間違えていることもあるし、古いバージョンのこともあります。新しいバージョンは、ちゃんと使えば正しく動作するようになっていると思いますよ。

    実は、作者に、「翻訳するから GlotPress のアカウントくれないか」といって、わざわざアカウントを作ってもらったのですが、最近ちょっと手抜きで、最新バージョンの翻訳が追いついていません。だから、ささやかな罪滅ぼしということで、ご勘弁を。

    トピック投稿者 h-pine-h

    (@h-pine-h)

    >kjmtshさん
    最後まで本当にありがとうございました!
    今基礎からphpはじめたところなので、今後スクリプトの中身を理解できるようになれればと思います。

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • トピック「固定ページに表示したPage Naviの表示がおかしいです。」には新たに返信することはできません。