[WordPress]投稿の複数ページ分割と、分割後のページ番号を判定する方法

WordPress関連の記事

nextpageクイックタグを使用して、投稿を複数ページに分割する

WordPressで文章を書いていて、内容がかなり長くなった時に、
その投稿の途中で複数ページに分割したい時。そんな時に使えるのが

<!--nextpage-->
↑こちらの <!--nextpage-->

というクイックタグになります。このクイックタグは、wp_link_pages(); というテンプレートタグと併用することが前提になるのですが、1つの投稿を任意の場所で、複数ページに分割することが可能です。

ちなみに wp_link_pages(); はどこに記述しておくかというと、
単一の投稿ページに適用されるテンプレートの中に記述します。(themeの構造にもよりますが、一般的には single.php 、もしくはそこから参照されている/template-parts/content-single.php あたりです)

今見ている投稿が分割した何ページ目かを判定して、表示を分岐させる方法

例えば、ひとつの投稿の末尾に、必ず表示している要素があるとします(例えば筆者プロフィール欄や、外部リンクなど)。
何も考えずに

<!--nextpage-->

を使ってページ分割してしまうと、分割した各ページにも、その要素がそれぞれ表示されてしまうことになります。

これを、分割した末尾のページにだけ表示させるには、以下のような記述を行って、現在表示しているページが何ページ目か?という判定を行えば解決します。
まず、functions.php にこちらを定義。

function is_last_page() {
  global $numpages;
  $nowpage = get_query_var('page', 1);
  if($nowpage === $numpages) {
    return true;
  }
}

↑これは、現在表示しているページ番号が何ページ目か?ということを比較するため、
3行目の get_query_var(); でページ番号を取得して、それを一旦、変数 $nowpage に格納。
2行目であらかじめ使用を宣言した分割ページの総数 $numpages と4~6行目で比較。一致すれば true を返す、という内容の定義です。(WordPressでは、特定のglobal変数のみ、この2行目のように宣言すると参照する事ができます。安易なglobal変数の参照はもちろんNGですが、WP Codexのこのページ記載のglobal変数にはアクセスできるとされています)

get_query_var(); で取得できる情報については、WP Codex の get_query_var(); ページに、まさに今回使えるようなページ番号取得の例とともに掲載されています。
上記のように定義した関数を、投稿ページのテンプレート内で

<?php if(is_last_page()) {
  // ページを判定して表示したい内容
} ?>

のように呼び出してあげれば、分割した特定のページでの分岐表示を行う事が可能です。
また、functions.php に記述した is_last_page() の条件判定の部分を応用して分岐条件をさらに追加すれば、末尾の判定のみならず、特定のnページ目の場合はこれを表示したい、というような事も可能かと思います。

重複コンテンツと見なされないために認識しておくこと

WordPressで投稿を分割した場合の注意点として、重複コンテンツ の懸念があります。
単一の投稿内でページ分割を行った場合、上記リンク先にあるGoogle公式の解説の通り、検索エンジンから、重複コンテンツ と見なされる対象に該当する可能性があります。(これはかなり以前から、Web制作の現場ではよく知られている点です。)
この重複コンテンツを回避する方法については諸説あり、手法も複数あるため今回の記事では割愛しますが、有名な方法としてひとつ挙げるとすれば、canonical属性をhead内に明示して、URLの正規化を行う事が挙げられます。
せっかく読みやすくしようとして記事分割したのに、検索エンジンから重複コンテンツと見なされないよう、この辺りもしっかり押さえておく事が重要です。

この記事のまとめ

今回は、WordPressでの単一投稿の分割と、分割した際の条件判定(ページ判定)、そして重複コンテンツに関しての認識をしっかり押さえておく事、この3点についてご紹介しました。
当サイトでは、今後もWordPressに関する内容について、更新を続けていく予定です。
(この記事は、品質の向上のため、随時内容を更新する可能性があります)

この記事をシェアする: