一時的に必要だったので、AIのGeminiに考えて貰ったコードです。
不要になりfunctions.phpから削除することしたので、メモとして残しておきます。
使用テーマはCocoonです。必要な方は子テーマのfunctions.phpに貼り付けてお使いください。
※このコードはスピード重視で私自身で調べたりすることなく、AIに丸投げで考えて貰ったコードです。カスタマイズは自己責任で行ってください。
メタディスクリプションを投稿本文下に表示するfunctions.phpのコード
// 投稿本文下にメタディスクリプションを追加する関数
function insert_meta_description_in_content($content) {
if (is_single()) {
global $post;
// メタディスクリプションを取得
$meta_description = get_post_meta($post->ID, 'the_page_meta_description', true);
// メタディスクリプションが存在する場合に追加
if (!empty($meta_description)) {
$content .= '<p class="meta-description">' . esc_html($meta_description) . '</p>';
}
}
return $content;
}
// the_content フィルターにフックする
add_filter('the_content', 'insert_meta_description_in_content');
これを貼り付けると、本文の後に何の装飾もないただの文章としてメタディスクリプションが表示されます。
コードの<p class=”meta-description”>の部分に独自にクラスを追加するか、.meta-descriptionのクラス名を使ってCSSで好きに装飾できます。
コード解説
Geminiに解説をお願いしました。私が書いた文章ではないので悪しからず。
このコードは、WordPressのシングル投稿ページ(個別の記事ページ)において、記事のメタディスクリプションを本文の最後に自動的に挿入するためのものです。
関数定義
function insert_meta_description_in_content($content) {
// ...
}
この部分は、WordPressが記事の内容を処理する際に呼び出すためのカスタム関数を定義しています。関数の名前は insert_meta_description_in_content
とし、引数として $content
(現在の記事本文)を受け取ります。
シングル投稿ページの判定
if (is_single()) {
// ...
}
この条件分岐は、現在のページがWordPressのシングル投稿ページであるかどうかを判定しています。この判定を行うことで、トップページやアーカイブページなど、他の種類のページではこの処理が実行されないようにしています。
グローバル変数 $post の宣言
global $post;
global $post;
は、現在表示されている投稿の情報を格納しているグローバル変数 $post
を関数内で使用できるようにするための宣言です。これにより、投稿IDなどの情報を取得できます。
メタディスクリプションの取得
$meta_description = get_post_meta($post->ID, 'the_page_meta_description', true);
ここでは、WordPressのカスタムフィールドからメタディスクリプションを取得しています。
$post->ID
: 現在の投稿のIDです。'the_page_meta_description'
: 取得したいカスタムフィールドのキー(名前)です。ご自身の環境に合わせて変更してください。true
: この引数をtrue
に設定すると、カスタムフィールドの値が単一の文字列として返されます。
メタディスクリプションの存在チェックと本文への挿入
if (!empty($meta_description)) {
$content .= '<p class="meta-description">' . esc_html($meta_description) . '</p>';
}
この部分が、このコードの核となります。
!empty($meta_description)
: 取得したメタディスクリプションが空でない(つまり、値が設定されている)ことを確認しています。'<p class="meta-description">' . esc_html($meta_description) . '</p>'
: 取得したメタディスクリプションを<p>
タグで囲み、meta-description
というクラス名を付与しています。esc_html()
は、取得した文字列をHTMLエスケープすることで、セキュリティを高めています。$content .= ...;
: ここが重要なポイントです。既存の$content
(記事本文)の最後に、新たに生成したメタディスクリプションのHTML文字列を結合しています。これにより、メタディスクリプションが記事本文の末尾に表示されます。
変更された $content の返却
return $content;
加工された $content
(メタディスクリプションが追加された記事本文)をWordPressに返しています。WordPressはこの返された $content
をもとに、最終的な記事内容を表示します。
フィルターフックへの登録
add_filter('the_content', 'insert_meta_description_in_content');
この行は、定義した関数をWordPressのthe_content
フィルターフックに登録しています。
'the_content'
: WordPressが記事のコンテンツを表示する直前に適用されるフィルターフックです。'insert_meta_description_in_content'
:'the_content'
フィルターが実行される際に呼び出される関数の名前です。
これにより、WordPressが記事本文を生成するたびに、このカスタム関数が自動的に実行され、メタディスクリプションが本文の最後に挿入されるようになります。
だ、そうです。ご参考まで。