【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"の文字エンコーディングを指定しました。