コンテンツの囲い

ショートコードでコンテンツを囲むことで、囲まれたコンテンツに対して操作を行うことができます。

  1. [wporg]content to manipulate[/wporg]

上記のように、コンテンツのセクションを囲むために必要なことは、HTMLのように開始の[$tag]と終了の[/$tag]を追加することです。

囲まれたコンテンツの処理

元の[wporg]ショートコードのコードに戻りましょう:

  1. function wporg_shortcode( $atts = array(), $content = null ) {
  2. // do something to $content
  3. // always return
  4. return $content;
  5. }
  6. add_shortcode( 'wporg', 'wporg_shortcode' );

コールバック関数を見ると、$atts$contentの2つのパラメータを受け入れることにしたことがわかります。$contentパラメータは、囲まれたコンテンツを保持します。$attsについては後で説明します。

  1. ショートコード`````[$tag]`````は、そのコンテンツと終了`````[/$tag]`````を含めて、ハンドラ関数の**戻り値**に置き換えられます。
  2. 出力を[保護する](/read/wordpress/6567fa873c89b29f.md)のはハンドラ関数の責任です。
  3. <a name="shortcode-ception"></a>
  4. ## ショートコードの入れ子
  5. ショートコードパーサーは、投稿のコンテンツに対して**単一のパス**を実行します。
  6. これは、ショートコードハンドラの`````$content`````パラメータが別のショートコードを含む場合、それは解析されないことを意味します。この例では、`````[shortcode]`````は処理されません:
  7. ``````bash
  8. [wporg]another [shortcode] is included[/wporg]
  9. `

他のショートコードの内部でショートコードを使用することは、ハンドラ関数の最終戻り値に対してdo_shortcode()を呼び出すことで可能です。

  1. function wporg_shortcode( $atts = array(), $content = null ) {
  2. // do something to $content
  3. // run shortcode parser recursively
  4. $content = do_shortcode( $content );
  5. // always return
  6. return $content;
  7. }
  8. add_shortcode( 'wporg', 'wporg_shortcode' );

制限事項

ショートコードパーサーは、同じ[$tag]の囲み形式と非囲み形式の混合を処理できません。

  1. [wporg] non-enclosed content [wporg]enclosed content[/wporg]

non-enclosed content」というテキストで区切られた2つのショートコードとして扱われるのではなく、パーサーはこれを「non-enclosed content [wporg]enclosed content」を囲む単一のショートコードとして扱います。