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に関する内容について、更新を続けていく予定です。
(この記事は、品質の向上のため、随時内容を更新する可能性があります)