質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.78%

wordpress カスタム投稿タイプカテゴリ一覧のページネーション2ページ目(/page/2)が404になってしまう

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 133

score 11

企業サイトを製作中、カテゴリ一覧表示ページでページ分けをする事になり、ページネーションをつけてみました。
ページネーションの表示自体はうまくいったものの。表題の通り2ページ目以降が404エラーを吐くようになりました。
ネット上で色々検索し、プラグインも試してみましたが結果は同じでした。お助けくださいm(_ _)m

ソースコード category-news.php

<?php
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$args = array(
    'paged' => $paged,
    'orderby' => 'post_date',
    'order' => 'DESC',
    'post_type' => 'news',
    'post_status' => 'publish',
    'posts_per_page' => 2,
    //'category_name' => 'event'
);
$the_query = new WP_Query($args);
$pages = $the_query->max_num_pages;
$wp_query->max_num_pages = $pages;
if ($the_query->have_posts()) :
    while ($the_query->have_posts()) : $the_query->the_post();

//記事表示ループ処理

?>
<?php wp_reset_postdata(); ?>
<?php endwhile;
endif; ?>

//ページネーション処理
<?php
if ($the_query->max_num_pages > 1) {
    $page_links = paginate_links(array(
        'base' => get_pagenum_link(1) . '%_%',
        'format' => '/page/%#%',
        'current' => max(1, $paged),
        'type' => 'array',
        'prev_text' => '<',
        'next_text' => '>',
        'total' => $the_query->max_num_pages
    ));
    // 2. 「<」 がない場合は追加
    if (strpos($page_links[0], 'prev page-numbers') === false) {
        array_unshift($page_links, '<span class="prev page-numbers">&#x3c;</span>');
    }
    // 3. 「>」がない場合は追加
    if (strpos($page_links[count($page_links) - 1], 'next page-numbers') === false) {
        array_push($page_links, '<span class="next page-numbers">&#x3e;</span>');
    }
    // 4. 'type' => 'list' の場合と同じ処理
    $r = '';
    $r .= "<ul class='page-numbers'>\n\t<li>";
    $r .= join("</li>\n\t<li>", $page_links);
    $r .= "</li>\n</ul>\n";
    echo $r;
} else {
    echo '<ul class="page-numbers">';
    echo '    <li><span href="#" class="prev page-numbers">&lt;</span></li>';
    echo '    <li><span class="page-numbers current">1</span></li>';
    echo '    <li><span href="#" class="next page-numbers">&gt;</span></li>';
    echo '</ul>';
}
?>
<?php wp_reset_postdata(); ?>
//function.php
function category_link_custom($query = array())
{

    // 子カテゴリーの404を回避
    if (isset($query['category_name']) && strpos($query['category_name'], '/') === false && isset($query['name'])) {
        $parent_category = get_category_by_slug($query['category_name']);
        $child_categories = get_categories('child_of=' . $parent_category->term_id);
        foreach ($child_categories as $child_category) {
            if ($query['name'] === $child_category->category_nicename) {
                $query['category_name'] = $query['category_name'] . '/' . $query['name'];
                unset($query['name']);
            }
        }
    }

    // カテゴリーのページ送りを修正して404を回避
    if (isset($query['name']) && $query['name'] === 'page' && isset($query['page'])) {
        $paged = $query['page'];
        if (is_numeric($paged)) {
            $query['paged'] = (int) $paged;
            unset($query['name']);
            unset($query['page']);
        }
    }

    return $query;
}
add_filter('request', 'category_link_custom');

試したこと

  • wordpressダッシュボードの「1ページに表示する最大投稿数」を
    サブループ内のposts_per_pageの表示数と同じに設定
  • wordpressダッシュボードのパーマリンクの設定の変更 
    /%category%/%postname%/.html
  • プラグインを使用

参考にしたサイト

↓こちらのサイトでは出来ている
https://sockma.jp/category/brand/page/2

https://qiita.com/takeshi_du/items/00a9ebe7bc35d743905b
https://qiita.com/kymtgt/items/9eb90764ebc060fac297
https://www.ecco.jp/blog/wp_query/#2
https://unskilled.site/wordpress%E3%81%A7%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%9A%E3%81%AB%E7%B0%A1%E5%8D%98%E3%81%AB%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%8D%E3%83%BC%E3%82%B7%E3%83%A7/
https://cravelweb.com/webdesign/wp-customize/post-3773

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る