WordPressで任意のショートコードを抽出する方法です。
よくあるUtility関数で、処理には正規表現を利用します。
ある文字列から指定したショートコードを取り出したい時に使います。
自己完結型ショートコード
最初に自己完結型のショートコード用です。
// Utility: 対象ショートコード(自己完結型)を抽出
function utility_extract_self_closing_shortcode( $shortcode, $content ) {
$pattern = '/\[' . $shortcode . '.*?\]/is';
if ( preg_match_all( $pattern, $content, $m ) ) {
$all = '';
foreach ( $m[0] as $code ) {
$all .= $code;
}
return $all;
}
}
こういうショートコードを対象に使います。
[shortcode arg1="" arg2="" arg2=""]
使い方はこんな感じ。
$shortcode = utility_extract_self_closing_shortcode('target_shortcode', $content);
囲み型ショートコード
次に囲み型のショートコード用です。
// Utility: 対象ショートコード(囲み型)を抽出
function utility_extract_enclosing_shortcode( $shortcode, $content ) {
$pattern = '/\[' . $shortcode . '.*?\].*?\[\/' . $shortcode . '\]/is';
if ( preg_match_all( $pattern, $content, $m ) ) {
$all = '';
foreach ( $m[0] as $code ) {
$all .= $code;
}
return $all;
}
}
こんなショートコードが対象です。
[shortcode]Text[/shortcode]
これが使い方。
$shortcode = utility_extract_enclosing_shortcode('target_shortcode', $content);
あとがき
僕はショートコードがネストされてる状態から特定のショートコードのみを取り出すために使ってます。
例として、ネスト構造のショートコードがある場合、余分な文字列を除いてショートコードが抽出できます。
また、取り出したショートコードをdo_shortcodeすれば、ネストに対応するショートコードが自作できます。
この記事は参考になりましたか?
コメント