コンテンツの囲い
ショートコードでコンテンツを囲むことで、囲まれたコンテンツに対して操作を行うことができます。
[wporg]content to manipulate[/wporg]
上記のように、コンテンツのセクションを囲むために必要なことは、HTMLのように開始の[$tag]
と終了の[/$tag]
を追加することです。
囲まれたコンテンツの処理
元の[wporg]ショートコードのコードに戻りましょう:
function wporg_shortcode( $atts = array(), $content = null ) {
// do something to $content
// always return
return $content;
}
add_shortcode( 'wporg', 'wporg_shortcode' );
コールバック関数を見ると、$atts
と$content
の2つのパラメータを受け入れることにしたことがわかります。$content
パラメータは、囲まれたコンテンツを保持します。$atts
については後で説明します。
ショートコード`````[$tag]`````は、そのコンテンツと終了`````[/$tag]`````を含めて、ハンドラ関数の**戻り値**に置き換えられます。
出力を[保護する](/read/wordpress/6567fa873c89b29f.md)のはハンドラ関数の責任です。
<a name="shortcode-ception"></a>
## ショートコードの入れ子
ショートコードパーサーは、投稿のコンテンツに対して**単一のパス**を実行します。
これは、ショートコードハンドラの`````$content`````パラメータが別のショートコードを含む場合、それは解析されないことを意味します。この例では、`````[shortcode]`````は処理されません:
``````bash
[wporg]another [shortcode] is included[/wporg]
`
他のショートコードの内部でショートコードを使用することは、ハンドラ関数の最終戻り値に対してdo_shortcode()
を呼び出すことで可能です。
function wporg_shortcode( $atts = array(), $content = null ) {
// do something to $content
// run shortcode parser recursively
$content = do_shortcode( $content );
// always return
return $content;
}
add_shortcode( 'wporg', 'wporg_shortcode' );
制限事項
ショートコードパーサーは、同じ[$tag]
の囲み形式と非囲み形式の混合を処理できません。
[wporg] non-enclosed content [wporg]enclosed content[/wporg]
「non-enclosed content
」というテキストで区切られた2つのショートコードとして扱われるのではなく、パーサーはこれを「non-enclosed content [wporg]enclosed content
」を囲む単一のショートコードとして扱います。