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

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

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

関連記事

コメント

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