属性の解析
ユーザーにとって、ショートコードは投稿コンテンツ内の角括弧を含む単なる文字列です。ユーザーはどの属性が利用可能で、裏で何が起こっているのか全く分かりません。
プラグイン開発者にとって、属性の使用に関するポリシーを強制する方法はありません。ユーザーは1つの属性、2つの属性、または全く属性を含めないこともあります。
ショートコードの使用方法を制御するために:
- ハンドラ関数のデフォルトパラメータを宣言する
- array_change_key_case()を使用して属性配列のキーのケースを正規化する
- デフォルト値の配列とユーザー
$atts
を提供してshortcode_atts()を使用して属性を解析する - 戻す前に出力を保護する
完全な例
基本的なショートコード構造を使用した完全な例で、自己閉じおよび囲みシナリオに対処し、出力を保護します。
タイトルを受け入れ、CSSでスタイルを設定できるボックスを表示する[wporg]
ショートコードです。
/**
* The [wporg] shortcode.
*
* Accepts a title and will display a box.
*
* @param array $atts Shortcode attributes. Default empty.
* @param string $content Shortcode content. Default null.
* @param string $tag Shortcode tag (name). Default empty.
* @return string Shortcode output.
*/
function wporg_shortcode( $atts = [], $content = null, $tag = '' ) {
// normalize attribute keys, lowercase
$atts = array_change_key_case( (array) $atts, CASE_LOWER );
// override default attributes with user attributes
$wporg_atts = shortcode_atts(
array(
'title' => 'WordPress.org',
), $atts, $tag
);
// start box
$o = '<div class="wporg-box">';
// title
$o .= '<h2>' . esc_html( $wporg_atts['title'] ) . '</h2>';
// enclosing tags
if ( ! is_null( $content ) ) {
// $content here holds everything in between the opening and the closing tags of your shortcode. eg.g [my-shortcode]content[/my-shortcode].
// Depending on what your shortcode supports, you will parse and append the content to your output in different ways.
// In this example, we just secure output by executing the_content filter hook on $content.
$o .= apply_filters( 'the_content', $content );
}
// end box
$o .= '</div>';
// return output
return $o;
}
/**
* Central location to create all shortcodes.
*/
function wporg_shortcodes_init() {
add_shortcode( 'wporg', 'wporg_shortcode' );
}
add_action( 'init', 'wporg_shortcodes_init' );