文字列から任意のショートコードを抽出する方法

[WordPress] 文字列から任意のショートコードを抽出する方法

※ 当サイトは広告を含みます。

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すれば、ネストに対応するショートコードが自作できます。

この記事は参考になりましたか?

関連記事

コメント

この記事へのコメントはありません。