• WasabitoYuzugosyou

    (@wasabitoyuzugosyou)


    カスタムポストタイプを利用して、複数の投稿タイプを混ぜた投稿一覧の
    アーカイブを表示しているページで、
    ページ送りがうまくいきません。

    以下、設定

    ・カスタムポストタイプのポストタイプを
     one,two,threeとしました
    ・それぞれのポストタイプから作成されたすべての記事一覧を作りたいため、
     post_typeをポストタイプの配列としました
    ・カスタムリライトスラッグは別名(それぞれichi,ni,san)としています
    ・query_postsだとバグる可能性があるようなのでWP_queryで実装
     ソースはこういう感じです

     <?php
    $paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;

    $args = array(
    ‘paged’ => $paged,
    ‘posts_per_page’ => 10,
    ‘post_type’ => array(‘one’,’two’, ‘three’)
    );

    $wp_query = new WP_Query($args);
    ?>

    <?php
    ////////////////////////////
    //一覧の繰り返し処理
    ////////////////////////////

    if (have_posts()) : // WordPress ループ
    $count = 0;
    while (have_posts()) : the_post(); // 繰り返し処理開始
    $count += 1;
    if ( is_list_style_bodies() ) {//一覧表示スタイルが本文表示
    get_template_part(‘entry-body’);//一覧表示スタイルが本文表示の場合
    } else {//サムネイルカードか、大きなサムネイルカードの場合
    //一覧表示スタイルがカードor大きなサムネイルカード表示の場合
    get_template_part(‘entry-card’);
    }

    //トップページ中間に広告をできるかどうか(表示するかどうか)
    if ( is_ads_list_in_middle_on_top_page_enable($count) ) {
    get_template_part(‘ad’);
    }

    endwhile; // 繰り返し処理終了 ?>
    <div class=”clear”></div>

    <?php else : // ここから記事が見つからなかった場合の処理 ?>
    <div class=”post”>
    <h2>NOT FOUND</h2>
    <p>お探しの記事は見つかりませんでした。</p>
    </div>
    <?php
    endif;
    ?>
    </div>

    <!– /#list –>

    <?php if (!is_home() || is_ads_top_page_visible()) ://メインページ以外は広告を出す
    get_template_part(‘ad-article-footer’ );
    endif; ?>

    <!–ページャー–>

    <?php
    //プラグインを使ったとき
    if(function_exists(‘wp_pagenavi’)) { wp_pagenavi(); } ?>

    <div class=”pager”>
    <?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 .= ‘%_%’;
    }

    if (wp_is_mobile()) {
    $mid_size = 1;
    } else {
    $mid_size = 3;
    }

    echo paginate_links(array(
    ‘base’ => $paginate_base,
    ‘format’ => $paginate_format,
    ‘total’ => $wp_query->max_num_pages,
    ‘mid_size’ => $mid_size,
    ‘current’ => ($paged ? $paged : 1),
    ‘prev_text’ => ‘<i class=”fa fa-caret-left fa-fx”></i> ’,
    ‘next_text’ => ‘ <i class=”fa fa-caret-right fa-fx”></i>’,
    )); ?>

    </div>

    <!– /.pager –>

    ・一ページ目は正常に表示されます
    ・二ページ目以降だと404に飛びます
     そのときのURLは
     http://example.com/page/page/3/
     といった感じです
    ・http://example.com/page/page/1/
    と手入力するとホーム(http://example.com)へとばされます
    ・http://example.com/page/?page=1
     と手入力するとアーカイブが表示されますが、
     http://example.com/page/?page=2 としても
     http://example.com/page/?page=3 としても
     同じ記事がでてきます
     (どれでも最新の10件がでます)
    ・プラグインWP_pagenaviで
     以下のソースを追記して実装しても
     同じ現象が起こります
    ・設定>表示設定>一ページに表示する最大投稿数を1としても同様
     (関係あるかわかりませんが。。。)

    post_typeに新たに配列を読み込ませているのを、
    リライトするときにうまくその情報を送れていない気がするのですが、
    具体的にどうかけいばいいのかわからずにいます
    (原因は違うかもしれませんが。。。)

    PHPはかけないので、検索して考えてそれっぽいことを実装しています。
    急ぎでどうしてもうまくいくようにしたいので
    お手数ですが、なにかこうしたら?というものがある方、
    どうぞよろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • この記述を行っているテンプレートは、何でしょうか?
    WordPressの読み込まれるテンプレートは、

    1. URLのパース
    2. データベースから投稿の読み出し
    3. それら結果に応じてテンプレートを読み込み

    という流れになっています。
    archive.phpや、index.php等で読み込むモノを変更している場合は、WP_Query等で記事読み込む前にテンプレートの決定が行われるので、たとえば、

    http://example.com/one/

    というページでこれを処理しているとき、カスタム投稿タイプoneの記事数が3件だとすると、
    ページに表示する最大投稿数を1にしても4ページ以降は存在しないので、先に404.phpが読み込まれてしまうという寸法です。

    これを避けるためには、固定ページで実装するのが良いかと思います。

    また、
    http://example.com/page/page/2/
    のパラメーターは、
    http://example.com/page/?paged=2

    となります。

    トピック投稿者 WasabitoYuzugosyou

    (@wasabitoyuzugosyou)

    お返事おそくなりました。

    回答ありがとうございます。

    ・利用しているテンプレートはsimplicityです。
     かなり多くの方が使われているテーマのようですが、
     多くのテーマと違い、archive.phpはないようです。

    ・>WordPressの読み込まれるテンプレートは、
     >URLのパース
     >データベースから投稿の読み出し
     >それら結果に応じてテンプレートを読み込み
     >という流れになっています。

     なるほどです。
     固定ページで実装する方でやってみます。

    ・以下の部分がどういう意味なのかよくわからなくて。。。
     大変お手数ですが、ご教示いただけませんでしょうか?

     >http://example.com/page/page/2/
     >のパラメーターは、
     >http://example.com/page/?paged=2

    類似のトピックがありましたので御参考まで。
    [解決済み] WP pagenaviで全件表示されない

    http://example.com/page/page/2/

    というURLは内部的には、

    http://example.com/page/?paged=2

    というURLとして解釈されると言うことです。
    なので、

    http://example.com/page/?page=2

    としてアクセスしても2ページ目にはたどり着けないということです。

4件の返信を表示中 - 1 - 4件目 (全4件中)

トピック「カスタム投稿のページ送りで2ページ目以降が表示されない」には新たに返信することはできません。