WordPressで「続き」ブロック前の本文だけを取得する方法

Cocoonカスタマイズ集
この記事は約2分で読めます。
記事内に広告が含まれています。

はじめに

WordPressでは、記事の冒頭だけを表示して「続きを読む」で全文を確認させるケースが多くあります。
トップページやアーカイブページでは、<!--more-->(「続き」ブロック)を使って本文の一部だけを抜粋することが一般的です。

しかし、get_the_content()を使うと、投稿や固定ページによって取得される本文の範囲が異なる場合があります。

この記事では、「続き」ブロック前の本文だけを安全に取得する方法を解説します。

$moreとは

WordPressでは、get_the_content()やthe_content()が<!--more-->をどう扱うかを、グローバル変数$moreで制御します。
$moreの値によって、取得される本文の範囲が変わります。

$moreの値
$more動作
0「続き」ブロック前のみ取得
1 全文を取得

$moreの初期値と挙動

表2に$moreの初期値と挙動を示します。
このように、使い方やループの種類によって取得される本文の範囲が異なります。

$moreの挙動
場所$more初期値get_the_content()の挙動
メインループ0「続き」ブロックの前のみ取得
投稿・固定ページ1全文を取得

投稿・固定ページで安全にmore前だけ取得する方法

投稿・固定ページで「続き」ブロックの前だけを取得したい場合は、$moreを一時的に変更する方法が推奨されます。

global $more;

$old_more = $more;

$more = 0;
$snippet = get_the_content('');

$more = $old_more;

$moreを変更した場合は、必ず元の値に戻してください。
これは、同じページ内で他のループやthe_content()を利用する際に、副作用を防ぐためです。

さいごに

今回紹介した方法を使えば、WordPressで「続き」ブロック前だけを確実にスニペットとして取得できます。
特に投稿・固定ページでは$moreの初期値が1のため、そのままでは全文が取得されますが、一時的に$more = 0に切り替えてから本文を取得し、元に戻すことで副作用なく安定してスニペットを制御可能です。

タイトルとURLをコピーしました