WordPressで一旦ショートコードを無視して処理してその後戻す方法【WordPress】

WordPressで一旦ショートコードを無視して処理してその後戻す方法【WordPress】



WordPressで本文(the_content()/get_the_content())を表示する前に色々と処理してあげたい際に、一旦展開されたショートコードの内容やショートコード内の属性値が邪魔になる場合があります。あるんです。

そこで、一旦ショートコード自体を本文から隔離して、その後に処理して最後に戻して改めてショートコードを実行する、という手順を考えました。

// 本文の未処理生データを取得.
$content       = $post->post_content;
// ショートコード格納配列.
$shortcode_ary = array();
// テーマで登録されているショートコードの正規表現パターンを全て取得.
$pattern       = get_shortcode_regex();
if ( preg_match_all( '/'. $pattern .'/s', $content, $search, PREG_SET_ORDER ) ) {
	if ( $search ) {
		$i = 0;
		foreach ( $search as $val ) {
			// ショートコードを[{通し番号}]に置換して、ショートコード格納配列に入れる.
			$str             = '[' . $i . ']';
			$shortcode_ary[] = $val[0];
			$content         = str_replace( $val[0], $str, $content );
			$i++;
		}
	}
}

// {$contentに自分のやりたい処理.}

// ショートコードを戻す.
$i = 0;
foreach ( $shortcode_ary as $val ) {
	$content = str_replace( '[' . $i . ']', $val, $content );
	$i++;
}
// ショートコードを改めて実行.
$content = apply_filters( 'the_content', $content );

解説:

  • $post->post_contentでthe_contentのフィルターがかかっていない生の本文データを取得します。
  • get_shortcode_regex()関数でテーマ内に登録されているショートコードパターンを全て取得します。
  • ショートコードを[shortcode]--[/shortcode][0][1][2]…と正規表現で置換しながら$shortcode_aryに順番に格納します。
  • ショートコードを隔離した$contentに処理を行います。
  • $shortcode_aryから改めて置換し直します。
  • apply_filters( 'the_content', $content )でショートコードの展開など、その他の処理を行います。
今日はここまで

関連する記事



こちらはいかが?


コメントを残す