🚀

wordPressページネーション最新版

2023/10/18に公開

wordPressがバージョンアップして、標準でページネーション、ページャーが使えるようになったためか、ページネーションの記事が古いものしかないことに気が付きました。
それで、今回作ったページネーションの根幹部分を公開したいと思いました。

            <!-- ナビゲーションボタン  -->
            <?php
            // PCでページネーションを無効にする
            if (!wp_is_mobile()) {
                global $multipage, $pages, $numpages, $post;
                $multipage = 0;
                $numpages = 1;
                $pages = array($post->post_content);
            }


            global $page, $numpages, $multipage;

            // 現在のURLを取得
            $current_url = get_permalink();

            if (strpos($current_url, '?') !== false) {
                // 基本的なパーマリンク設定の場合
                $base_url = rtrim($current_url, '/');
                $prev = ($page > 1) ? $base_url . '&page=' . ($page - 1) : null;
                $next = ($page < $numpages) ? $base_url . '&page=' . ($page + 1) : null;
            } else {
                // カスタムパーマリンク設定の場合
                $base_url = rtrim($current_url, '/') . '/';
                $prev = ($page > 1) ? $base_url . ($page - 1) . '/' : null;
                $next = ($page < $numpages) ? $base_url . ($page + 1) . '/' : null;
            }

            $content = get_the_content(); // 記事の内容を取得

            // ページネーションのデフォルト設定
            $pagination_defaults = [
                'before'         => '<div class="c-pagination -post">',
                'after'          => '</div>',
                'next_or_number' => 'number',
            ];

            if (wp_is_mobile()) {
                if ($numpages > 1) {
                    // モバイルで、ページ区切りがある場合の処理

                    // 上部のボタン
                    if ($page > 1) {
            ?>
                //ここにページャーのボタン        
		<?php
                    }

                    // 記事の内容
                    ?>
                    <div class="<?= esc_attr(apply_filters('swell_post_content_class', 'post_content')) ?>">
                        <?php the_content();  // 本文 
                        ?>
                    </div>
                    <?php

                    // 下部のボタン
                    if ($page != $numpages) {
                    ?>
                        //ページネーションのボタン
                    <?php
                    }

                    // ページネーション
                    wp_link_pages($pagination_defaults);
                } else {
                    if ($numpages == 1) {
                        // ここにはモバイルで、ページネーションの設定がない場合の処理を書きます
                    ?>
                        <div class="<?= esc_attr(apply_filters('swell_post_content_class', 'post_content')) ?>">
                            <?php the_content();  // 本文 
                            ?>
                        </div>
                <?php
                    }
                }
            } else {
                // パソコンの場合の処理
                ?>

                <div class="<?= esc_attr(apply_filters('swell_post_content_class', 'post_content')) ?>">
                    <?php the_content();  // 本文 
                    ?>
                </div>
            <?php


            }

ページ区切りのコードは、二つあります。

古い従来のコード

<!--nextpage-->

wordPressのブロックエディターのブロックの区切りの場合

<!-- /wp:nextpage -->

ただしwordPressで記事本文を表示する際に、こうしたコードが自動削除されるため、このコードを使ってページネーションが設定されている記事か判断ができないのです。
そのためページ数を判断基準する方式で、コードを書きました。

参考記事
https://designcolor-web.com/wordpress-pagination/

https://fukuro-press.com/wordpress-pagination/

Bingは、このベースになるコードを教えてくれました。

<?php
// 記事のIDを取得
$post_id = get_the_ID();

// 記事のページ番号を取得
$page_number = get_post_meta($post_id, '_wp_page_number', true);

// 記事のテンプレートファイル名を取得
$page_template = get_post_meta($post_id, '_wp_page_template', true);

// ページネーションする記事かどうかを判別
if ($page_number > 1 || $page_template == 'template-paged.php') {
    // ページネーションする記事の場合の処理
} else {
    // ページネーションしない記事の場合の処理
}
?>

Discussion