WordPressのショートコード(自作コードにも対応)を削除して抜粋文を得る方法(文字数指定、htmlタグ除去、改行除去)

WordPressのショートコード除去といえば、strip_shortcodes()が用意されています。

しかしstrip_shortcodes()は自分で作成したオリジナルのショートコードを除去してはくれません。デフォルトで登録されているショートコードしか削除してくれないんですね。

抜粋文を本文から作る際に、この点でハマったので解決策を以下に記しておきます。

オリジナルショートコードを削除する方法

//本文から抜粋を作る
function content_excerpt($content,$num){
	$content = preg_replace('#\[[^\]]+\]#', '',$content);
	$content = strip_tags($content);
	$content = str_replace(array("\r\n","\n","\r"),"",$content);
	$content = mb_strcut($content,0,$num,'UTF-8');
	return $content;
}

↑これをfunctions.phpに貼り付け、

echo content_excerpt( $post->post_content , 300 );

使いたいところで↑を入れてください。

第二引数(300のところ)は、抜粋文にありがちな文字数指定です。取得したい文字数を入れてください。

関数の解説

やっていることとしては簡単で、まずは正規表現を使ってショートコードを囲む大括弧([]のこと)に囲われた範囲を除去します。

つぎにhtmlタグを除去し、改行コードを除去し、最後に指定した文字数を切り出しています。

改行コードを除去しているので、meta descriptionなどで使った場合にソースコードが改行されてしまうのを防げます。