サポート » 使い方全般 » ページ送りがどうしても上手くいきません

  • 解決済 yukky1912

    (@yukky1912)


    度々質問して申し訳ありません。

    記事一覧を作成し、下記のコードを用いてページャーを作成したのですが、
    ページ送りが上手くいかず、つまづいております。

    また、こちらの過去にあった質問の方法を試してみたのですが、
    /page/2/以降のURLだと上手く表示されません。

    <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?>
    <?php query_posts('posts_per_page=3&paged='.$paged); ?>
    <?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
    
    (中略)
    
     <?php endwhile; ?>
     <?php endif; ?>
    
    <?php global $wp_rewrite;
        $paginate_base = get_pagenum_link(1);
        if(strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()){
             $paginate_format = '';
             $paginate_base = add_query_arg('paged','%#%');
             } else {
                $paginate_format = (substr($paginate_base,-1,1) == '/' ? '' : '/') .
                user_trailingslashit('page/%#%/','paged');
                $paginate_base .= '%_%';
                }
                   echo paginate_links(array(
                   'base' => $paginate_base,
                   'format' => $paginate_format,
                   'total' => $wp_query->max_num_pages,
                   'mid_size' => 4,
                   'current' => ($paged ? $paged : 1),
                   'prev_text' => '«',
                   'next_text' => '»',
     )); ?>

    なお、パーマリンクの設定カスタム構造の『/%postname%/』にしてありますが、
    バグ等関係ありますでしょうか?

    恐れ入りますが、助けてください。
    よろしくお願い致します。

15件の返信を表示中 - 1 - 15件目 (全18件中)
  • 管理画面の
    設定>表示設定>
    「1ページに表示する最大投稿数」を「1」にする、とか。

    外してたらすいません。

    トピック投稿者 yukky1912

    (@yukky1912)

    お返事ありがとう御座います。

    最大投稿数を「1」にしてみたのですが、
    変化は特にありませんでした。。

    get_query_var(‘paged’) : 2; 等にすると
    同ページ上では正常に表示されるみたいなので
    『/page/2』へのリンク設定が問題なのでしょうか…。

    モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    query_postsを使っているのがほぼ原因ですが、これを使っている理由は何ですか?
    頭2行はなくしても問題なさそうなのですが。

    トピック投稿者 yukky1912

    (@yukky1912)

    お返事ありがと御座います。

    固定ページに記事タイトルを一覧表示させたかったので
    query_postsを使いました。
    仰られるようにquery_postsを使用するのはまずいみたいですね…。

    なのでget_postを利用する下記のコードに変更してみたのですが、
    今度はページャーそのものが2ページ目以降を表示してくれず…。

    <?php
    global $post;
    $my_page = get_query_var('paged');
    $posts = get_posts('numberposts=4&paged='.$_mypage);
    ?>
    
    ・
    ・
    ・
    
    <?php if($posts): foreach($posts as $post): setup_postdata($post); ?>
    (中略)
    <?php endforeach; ?>
    <?php endif; ?>
    
    <?php wp_pagenavi(); ?>

    固定ページで一覧を分割するこては可能なのでしょうか?

    モデレーター gatespace

    (@gatespace)

    get_postsはページ送りには向いていません。

    固定ページで記事一覧を表示させたいとの事ですが、どうしてそうしたいのですが?

    とくにテンプレートファイルをいじらなくても
    フロントページの設定を固定ページにして、「ホームページ」「投稿」それぞれに固定ページを振り分けるだけでいいような気もしますが。

    トピック投稿者 yukky1912

    (@yukky1912)

    お返事ありがとう御座います。

    サイドバーの新着記事一覧から、
    「続きを読む」を押すと記事一覧ページに飛ぶという設定をしているため、
    一覧ページは固定ページにしておいた方がリンクしやすいのではないかと考えました。

    一応現状では、ホームページをフロントページとして固定ページを振り分けてあります。

    そもそも固定ページに一覧ページを作成すること自体が
    間違っているのでしょうか?

    モデレーター gatespace

    (@gatespace)

    一応現状では、ホームページをフロントページとして固定ページを振り分けてあります。

    であれば、例として
    ・フロントページ:固定ページA
    ・投稿ページ:固定ページB
    とすれば

    サイドバーの新着記事一覧から、
    「続きを読む」を押すと記事一覧ページに飛ぶという設定をしているため、

    のリンク先は固定ページBにすれば良いだけの話です。

    トピック投稿者 yukky1912

    (@yukky1912)

    ありがとう御座います。

    では、その際の一覧表示およびページ送りに関しては
    query_postsを使用しても大丈夫でしょうか?

    モデレーター gatespace

    (@gatespace)

    では、その際の一覧表示およびページ送りに関しては
    query_postsを使用しても大丈夫でしょうか?

    むしろ何もしないでください。
    まずはデフォルトテーマなどで一度確認してみてください。
    (特にタグを書かなくても、デフォルトテーマにしたあと、ダッシュボードの固定ページの一覧から「投稿ページに設定した固定ページ(固定ページB)」の「表示」をクリックすれば、開くことができます)

    Codexの「テンプレート階層」にも説明があるのですが、この場合(ホームページをフロントページにして、投稿ページに固定ページを設定シアタ場合)はテーマのhome.php(無ければindex.php)が適用されます。

    その際も、query_postsは使わなくても良いんです。
    query_postsを使うケースは、よっぽどクエリを改変しなければいけない事情がある場合のみです。
    (それも、最近では別の方法が推奨されています)

    まずは、通常設定できる範囲で確認してみてください

    こんにちは

    yukky1912さんのコードは、間違っていません。
    elseのところのスペースは、ちょっとおかしい。

    動かないのは、固定ページテンプレートを使っているためで、トップページに表示するなら、

    home.phpを作って、それにそのコードを記述してみてください。

    get_posts() ,query_posts()でのページングは、異なります。

    私のメモで恐縮ですが、最後のほうにサンプルコード書いてあります。

    http://tenman.info/labo/snip/templates/the-loop

    モデレーター Takuro Hishikawa

    (@hissy)

    冒頭の yukky1912 さんのコードは間違ってません。手元のTwenty Twelveのページテンプレートにコピペしても問題なく動きました。パーマリンク構造を「/%postname%/」にして試しました。うまく表示されない、とはどういう状態でしょうか?

    モデレーター Takuro Hishikawa

    (@hissy)

    あ、かぶった…

    モデレーター Takuro Hishikawa

    (@hissy)

    query_postsを使用するのは別に構わないのですが、一連の処理が終わった後に<?php wp_reset_query(); ?>を追加しないと、他の部分が変になる可能性があります。query_postsを使わない方法も例示しておきますので、もし完全にコピペでお使いでしたらこちらを試してみてください。固定ページでも問題ないはずです

    <?php
    $paged = (int) get_query_var('paged');
    $args = array(
    	'posts_per_page' => 3,
    	'paged' => $paged,
    	'orderby' => 'post_date',
    	'order' => 'DESC',
    	'post_type' => 'post',
    	'post_status' => 'publish'
    );
    $the_query = new WP_Query($args);
    ?>
    <?php if ( $the_query->have_posts() ) : ?>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    
    <?php /* 適当に変更してください */ ?>
    <h1><?php the_title(); ?><small><?php the_date(); ?></small></h1>
    
    <?php endwhile; ?>
    <?php endif; ?>
    
    <?php
    if ($the_query->max_num_pages > 1) {
    	echo paginate_links(array(
    		'base' => get_pagenum_link(1) . '%_%',
    		'format' => 'page/%#%/',
    		'current' => max(1, $paged),
    		'total' => $the_query->max_num_pages
    	));
    }
    
    wp_reset_postdata();
    ?>
    トピック投稿者 yukky1912

    (@yukky1912)

    gatespaceさん

    ありがとう御座います。
    お陰様で固定ページ間のリンク自体はどうにかなりました。
    後は一覧表示の問題だけですね…。

    nobitaさん

    こんばんは。
    ありがとう御座います。サンプルコード、非常に助かります。
    あのコード自体間違っていなかったんですね。

    home.phpは別に用意してあるので、別のページで記入しても大丈夫でしょうか?
    一覧はblog.phpに書き込んでいるんですが、そのまま固定ページの設定を外すと上手くいくのでしょうか?

    hissyさん

    お返事ありがとう御座います。
    実際にTwentyTwelveで正常な動作になったんですね…。

    症状としてはページングの際『page/2/』がつくと『<body class=”error404″>』のエラーになってトップページが表示されてしまうんですね。
    また、サイト自体はオリジナルのテーマで作成しており、トップページとは別に固定ページで一覧ページを作っているんですよ。

    後、コード送っていただきありがとう御座いました。
    早速コピペして試してみたのですが、
    404エラーになってトップページに戻ってしまいます…。

    オリジナルのテーマだから…なのでしょうか 汗

    モデレーター Takuro Hishikawa

    (@hissy)

    > 記事一覧を作成し、下記のコードを用いてページャーを作成した

    この手順に誤りがあるのではないでしょうか。

    私がやったのは
    1. 上記コードを含む固定ページページテンプレートを作成
    2. 一覧用の固定ページを作成し、1.のページテンプレート選択して公開
    3. 2.で作成した固定ページにアクセス。問題ありませんでした

15件の返信を表示中 - 1 - 15件目 (全18件中)
  • トピック「ページ送りがどうしても上手くいきません」には新たに返信することはできません。