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

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

ただいまの
回答率

89.53%

【Wordpress】tag.phpでページャーがうまく動かない

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,060

omori3

score 7

 前提・実現したいこと

Wordpressでブログを構築しています。
現在、tag.php(タグテンプレート)とauthor.php(投稿者テンプレート)の2テンプレート内で、
10件記事を出力させていて、それ以上の場合はページャーで/page/2に飛ばそうでしてるところでつまづいてます。

ぞれぞれURLは以下のような形式です。
http://example.com/tag/タグ名
→http://example.com/tag/タグ名/page/2 (404エラー)

http://example.com/p/author/投稿者名
→http://example.com/p/author/投稿者名/page/2  (404エラー)

どうかご教授願います。

 発生している問題・エラーメッセージ

ページャーのボタン等は生成される、URLも出力されているのですが、クリックすると404という状態です。
また/page/1/としても404になるので、そもそもページ分割(ページャーシステム)がうまく作動してない感じのようです。

 該当のソースコード

<?php
// ループ
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        $tag_id = $wp_query->query_vars['tag_id'];
        $args = array(
    'tag_id' => $tag_id,
    'posts_per_page' => 10,
    'paged' => $paged,
    'orderby' => 'post_date',
    'order' => 'DESC',
    'post_type' => 'post',
    'post_status' => 'publish'
        );
        $the_query = new WP_Query($args);
    if($the_query->have_posts()) :
      while($the_query->have_posts()) : $the_query->the_post();
      ?>    
//
//
// ループ内の処理
//        
//
    <?php endwhile; 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
    ));
}
?>
<?php wp_reset_postdata(); ?>

 試したこと

ダッシュボード内「1ページに表示する最大投稿数」は1にしてあります。

 補足情報(FW/ツールのバージョンなど)

トップページやカテゴリーページはページャー動いています、、

11/23 18:47更新
$paged、$the_query->max_num_pages等は取得できてるようです。
htts://url.com/tag/tagslug/page/1にすらも404になってします。
htts://url.com/tag/tagslug/では一ページ目に該当する表示ができてます。

本来ならpage/1も一ページ目の表示が普通に見れるはずと認識しております。
つまり/page/を使ったそもそものところに不具合があるのかなと思います。(上記の通り$paged等は取得できているので)

11/23 21:16更新
なんとなく答えに近づいて来た気がしました。
functions.phpにカテゴリーページの/category/スラッグを消すため、以下の記述をしていた模様です。
このリライトルールがtag.php等に影響を及ぼしているような気がします。
これから調査しますが、何かわかる方は教えてください。よろしくお願いします。

add_filter('user_trailingslashit', 'remcat_function');
function remcat_function($link) {
  return str_replace("/category/", "/", $link);
}
add_action('init', 'remcat_flush_rules');
function remcat_flush_rules() {
  global $wp_rewrite;
  $wp_rewrite->flush_rules();
}
add_filter('generate_rewrite_rules', 'remcat_rewrite');
function remcat_rewrite($wp_rewrite) {
  $new_rules = array('(.+)/page/(.+)/?' => 'index.php?category_name='.$wp_rewrite->preg_index(1).'&paged='.$wp_rewrite->preg_index(2));
  $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

+2

とりあえず、

<?php php endwhile; endif; ?>

<?php endwhile; endif; ?>
        'format' => 'page/%#%',

この部分に全角が含まれています。

それらを直せば動くのではないでしょうか。

参考まで。

追記

固定ページですと書かれているコードでも動いたのですが、tag.phpだとおっしゃっるとおりエラーになりました。なので、

if ($the_query->max_num_pages > 1) {


の前に

global $the_query;


でどうでしょう。

ちなみに修正後のコードもタイポされてますよ。

'current' => max(1, $paged), /*カンマがとれてます*/

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/22 01:04

    8-0_nyan5さん、ご回答ありがとうございます。

    まさかと思ったのですが、今回teratail初投稿でして、コードの大事な部分だけ切り取ってるうちにこちらのみおかしくなっていた模様で、コードの方はphp被りと全角は大丈夫でした。大変失礼しました。

    未だ解決しないので何か他に気づき、もしくはアドバイス等ありましたらぜひよろしくお願いいたします。

    キャンセル

  • 2018/11/23 12:10

    8-0_nyan5さん、引き続き、ご回答ありがとうございます。

    変わらず、404でした。
    タイポすいません、直しておきます。

    色々試して行く中で、別の環境(別のwordpressサイト)にこのtag.phpを置いてみたら、ページャー動いてました、、(global $the_query使っても使わなくてもいけました。)本家は何がいけないのでしょうか

    パーマリンク設定では
    カスタム投稿で
    /p/%postname%
    オプション、タグベースで
    tag
    を設定しています。


    引き続き何か気づく点がありましたらよろしくお願いいたします。

    キャンセル

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

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