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

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

ただいまの
回答率

88.81%

固定ページでのページネーションが表示できない。wordpress

解決済

回答 1

投稿

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

tenlife

score 43

固定ページでページネーションを表示させようとしていますがうまく実装出来ません。

やりたい事: 固定ページでページネーションを表示させる事です。

現状: functions.phpに設定してある関数は呼び出せているが(echoで確認しました)、表示がされないといった状態です。
ですがindex.phpだと表示されます。

参考にしているサイト
https://www.webdesignleaves.com/pr/wp/wp_func_pager.htmll#h5_index_16

固定ページのurlです
http://hogehoge/?page_id=21

index.phpで表示出来る時(2をクリックした時)
http://hogehoge/?paged=2

なので固定ページurlは以下のようになるのではと予想しています。
http://hogehoge/?page_id=21/?paged=2
    <?php if(have_posts()) :?>
          $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
            pagination( array(
            'mid_size' => 1,
            'prev_text' => '<i class="fas fa-chevron-left mr-2"></i>PREV',
            'next_text' => 'NEXT<i class="fas fa-chevron-right ml-2"></i>',
         'paged' => $paged,
          )); ?>
        <?php endif; ?>
function pagination( $args = array() ) {

        $navigation = '';
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        $query = new WP_Query($arg);
        // 1ページのみの場合は出力しない
        if ( $query->max_num_pages > 1 ) {

            $args = wp_parse_args(
                $args,
                array(
                    'mid_size'           => 1,
                    'prev_text'          => _x( 'Previous', 'previous set of posts' ),
                    'next_text'          => _x( 'Next', 'next set of posts' ),
                    'screen_reader_text' => __( 'Posts navigation' ),
                    'type' => 'list',  //リストとしてマークアップ
                )
            );

            // type に list 以外が指定されていたら list に強制
            $args['type'] = 'list';

            // paginate_links() を使ってリンクを生成
            $links = paginate_links( $args );

            if ( $links ) {

                $patterns = array(
                    '#<li><a class=([\'\"]([^\'\"]*)[\'\"]) ([^>]*>[^<]*)</a></li>#', 
                    '#<li><span class=([\'\"]([^\'\"]*)[\'\"])\s?([^>]*>[^<]*)</span></li>#',
                    '#<li><span (aria-current=[\'\"]([^\'\"]*)[\'\"]) class=([\'\"]([^\'\"]*)[\'\"])\s?([^>]*>[^<]*)</span></li>#',
                );

                $replacements = array(
                    '<li class="page-item"><a class="$2 page-link" $3</a></li>',
                    '<li class="page-item disabled"><span class="$2 page-link" $3</span></li>',
                    '<li class="page-item active"><span $1 class="$4 page-link" $5</span><span class="sr-only">(現在のページ)</span></li>',
                );

                ksort($patterns);
                ksort($replacements);
                $links = preg_replace($patterns, $replacements, $links);

                //_navigation_markup() は使わずに nav 要素でマークアップ
                $navigation = '
                <nav class="navigation %s" role="navigation" aria-label="%s">
                    <div class="nav-links">%s</div>
                </nav>';
                //nav 要素の aria-label の値には screen_reader_text の値を設定
                $navigation = sprintf( $navigation, 'pagination', esc_html( $args['screen_reader_text'] ), $links );
            }
        }
        echo $navigation;
    }

調べてみると$pagedがしっかり設定されていないと出来ないです、みたいな事が出てきたので色々試してみましたが、変わらずでした。
調べたサイト
https://takasuke.net/wordpress/pagination/
https://qiita.com/kymtgt/items/9eb90764ebc060fac297
https://shogo-log.com/setup-pagenation/
https://elearn.jp/wpman/function/paginate_links.html

初めての作業なので、理解が浅い部分があるかと思います。

どなたか詳しい方がいらっしゃいましたら、ご教授いただきたいです。
よろしくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • CHERRY

    2020/08/08 13:53

    少なくても URL は、

    http://hogehoge/?page_id=21&paged=2

    のように複数のパラメーターは & でつなぎますが、出力されているURL は、どうなっているのでしょうか。

    キャンセル

  • tenlife

    2020/08/09 05:58

    コメントありがとうございます!

    やはりそのような形になるのですね。

    ページネーションを表示させたい固定ページでは、まずページネーション自体が表示されないのでurlは作成されていません。

    ただしページネーションを表示出来るindex.phpだとurlは以下のようになっています。
    http://hogehoge/?paged=2

    キャンセル

  • CHERRY

    2020/08/09 19:55

    WordPress のパーマリンクの設定は何にしていますか?

    キャンセル

  • tenlife

    2020/08/09 21:18

    返信ありがとうございます。

    現在設定は基本になっています。以下のようなリンクです。
    http://hogehoge/?p=123

    キャンセル

回答 1

checkベストアンサー

+2

paginate_linksのtotalは指定がなければメインクエリのmax_num_pagesが使われます
そしてtotalが2未満であればpaginate_linksは何も出力しません

固定ページのメインクエリのmax_num_pagesは1です
なのでtotalが指定されなければpaginate_linksは何も出力しません

'total'
(int) The total amount of pages. Default is the value WP_Query's max_num_pages or 1.

 $args['total']=$query->max_num_pages;


などのようにして$query->max_num_pagesをtotalとして与えてください

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/08/11 07:07

    回答ありがとうございます!
    提示された書き方を試したところ上手く表示されるようになりました。
    詳しい説明もありがとうございます。非常に勉強になります。

    現在は2ページ目に転移した時に中身の表示が1ページ目と同じになってしまいます。
    次はこれに取り組んでいきます。
    ありがとうございました!

    キャンセル

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

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

関連した質問

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