【WordPress】meta descriptionタグを本文の一部から自動作成

WordPressでブログを運営していると、投稿ページのmeta description(メタディスクリプション)タグの内容を、毎回、設定するのが面倒くさいと思うことがあるかもしれません。

今回は、そのような場合に使えるソースコードの例となり、ページの本文の一部を使いmeta descriptionタグを自動で作成します。

meta descriptionタグを自動で作成する例

以下がソースコードの例となり、functions.phpに記述します。例では、投稿ページのmeta description(メタディスクリプション)タグを自動で作成します。

meta descriptionタグの内容の文字列は、本文の先頭から全角130文字(半角260文字)となります。

function my_description(){   
	// 現在の投稿オブジェクトを取得
	$post_data = get_post();
	// 本文を取得
	$content = $post_data->post_content;
    if( is_single() && $content ){
    	// HTML、PHPタグを削除
        $content = strip_tags( $content );
        
        // 改行、シングル、ダブルクォーテーションを削除
        $str = array( "\r\n", "\r", "\n", "'", '"' );
        $content = str_replace( $str, "", $content );
        
        // []に囲まれている文字列を除去 
        $regexp = "/\[.*?\]/"; 
        $content = preg_replace($regexp, "", $content);
        
        // 現在のページの本文から一部を抜粋
        $description = mb_strimwidth( $content, 0, 260, "……", "utf-8" ); 
        echo "<meta name='description' content='" . $description . "'>";
    }
}
add_action('wp_head', 'my_description');

ソースコードの説明

上記ソースコードでは、アクションフックwp_headのコールバック関数内で、まず、get_post()を使用し本文を取得します。

そして、本文のある投稿ページの場合に、取得した本文の文字列をPHPの「文字列(String)関数」を使用して修正します。最後に修正した文字列を投稿ページのmeta descriptionタグの内容として出力します。

以下は、例のソースコードのポイントとなる箇所となります。

投稿の本文を取得|get_post()

get_post関数は投稿の情報をデータベースから返します。

例のソースコード2行目

// 現在の投稿オブジェクトを取得
$post_data = get_post();
// 本文を取得
$content = $post_data->post_content;

例のソースコードでは、get_post関数を使い現在のページの本文を取得し、変数$contentに取得した本文を格納しています。

また、get_post関数については、以下のリンク先を参考にしてみてください。

HTML・PHP タグを取り除く|strip_tags() 

strip_tags関数は、第1引数に指定した文字列から、 HTML 、 PHP タグを取り除いた文字列を返します。第2引数に取り除かないタグの指定もできます。

例のソースコード7行目

// HTML、PHPタグを削除
$content = strip_tags( $content );

上記ソースコードでは、$content(取得した本文)を第1引数に指定し、その文字列からHTML ・ PHP タグを除去します。それにより、出力するソースコードが崩れるを防いでいます。

文字列を検索し置換|str_replace() 

str_replace関数は、引数に指定した条件により文字列を検索・置換します。

例のソースコード10行目

// 改行、シングル、ダブルクォーテーションを削除
$str = array( "\r\n", "\r", "\n", "'", '"' );
$content = str_replace( $str, "", $content );

上記ソースコードでは、第3引数に指定した$contentから、第1引数で指定した「改行」、「シングルクォーテーション」、「ダブルクォーテーション」を検索します。

そして、第2引数に""を指定することにより、第1引数で指定した「改行」などを削除します。

それにより、出力するソースコードが崩れるを防いでいます。

正規表現を用いて文字列を検索し置換|preg_replace()

preg_replace関数は、引数に指定した条件により、正規表現を用いて文字列の検索を行い置換します。

例のソースコード14行目

 // []に囲まれている文字列を除去 
$regexp = "/\[.*?\]/"; 
$content = preg_replace($regexp, "", $content);

上記ソースコードでは、第3引数に指定した$contentから、第1引数で指定した正規表現で指定した文字列のパターン([]に囲まれている文字列)を検索します。

そして、第2引数に""を指定することにより、第1引数で指定した文字列のパターン([]に囲まれている文字列)を削除します。 

それにより、[]を使用するショートコードや画像挿入の箇所を出力しないようにしています。

また、str_replace、preg_replace関数については、以下のリンク先を参考にしてみてください。

指定した幅で文字列を丸める|mb_strimwidth() 

mb_strimwidth関数は、引数に指定した値により、文字列を丸めることが出来ます。引数に指定する値は以下となります。

  • 第1引数は、丸める文字列を指定
  • 第2引数は、丸める文字列の開始位置の値を先頭から指定(負の値に指定した場合、文字列の末尾からの値)
  • 第3引数は、丸める文字列の幅を指定(全角の1文字の場合は値が2、半角の1文字の場合は値が1となります)
  • 第4引数は、丸めた文字列の後に、その文字列の最後に追加される文字列を指定(省略可能)
  • 第5引数は、文字エンコーディングを指定(省略可能で、省略した場合は 内部文字エンコーディングを使用)

例のソースコード18行目

// 現在のページの本文から一部を抜粋
$description = mb_strimwidth( $content, 0, 260, "……", "utf-8" );

例のソースコードでは、第1引数を$contentに指定。丸める文字列の最初から指定したいので、第2引数は0を指定します。丸める文字数は全角130文字にしたいので、第3引数は260に指定。第4引数は"……"を指定し、丸めた文字列の後に追加します。第5引数には"utf-8"の文字エンコーディングを指定しました。

参考サイトなど

コメント投稿コメント投稿欄を開く

コメントは項目欄(*は必須項目)を入力し、「コメントを送信」ボタンをクリックしてください。 (メールアドレスは公開されることはありません。コメントの公開は承認制となります。)

また、多忙によりコメントには返信できない場合があります。

Twitterで返信する場合はこちらから。