🚀
wordPressページネーション最新版
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で記事本文を表示する際に、こうしたコードが自動削除されるため、このコードを使ってページネーションが設定されている記事か判断ができないのです。
そのためページ数を判断基準する方式で、コードを書きました。
参考記事
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