この記事は最後に更新してから1年以上経過しています。
説明
4.3のリリースまであと少しなわけですが、4.2.3が緊急リリースされました。4.2.2とソースコードを比較すると、ざっくりTinyMCE絡みが多い印象を受けたのですが、ショートコード関連も少し変わっていたので簡単にまとめてみました。
確認用のショートコードを準備
まずは違いを確認するために、次のショートコードを準備しました。
add_shortcode( 'abc', 'shortcode_abc' );
function shortcode_abc( $atts, $content='' ) {
static $abc_times = 0;
$abc_times++;
return esc_attr( 'abc@'.$abc_times );
}
確認用の投稿内容は次の通りです。
<!-- [abc /] -->
<div class="[abc /]">ここはどうかな[abc /]</div>
[abc /]
括弧をHTMLエンティティの[と]で表現。
4.2.2と4.2.3でどのように変わったかを次の表で示します。
バージョン | do_shortcode | strip_shortcodes |
---|---|---|
4.2.2 |
|
|
4.2.3 |
|
|
ショートコードを実行するdo_shortcode関数の違い
4.2.2以前のショートコード処理は投稿内容内のショートコードをすべて処理しているのに対し、4.2.3のショートコード処理ではHTMLコメント内のショートコードは処理されていないことがわかります。またショートコードを使用できる要素内の属性値も制限があるようです。標準の4.2.3おいてショートコードが使用できる要素は次の81種類。input要素やselect要素は含まれていないようです。
4.2.3にアップデートして要素の属性値でショートコードが使用できなくなった場合は、wp_kses_allowed_htmlフィルターを利用し、テーマ内のfunctions.phpに以下に示すコードを追加することで問題を回避できます(この例はinput要素のvalue属性値を有効にしています)。
add_filter( 'wp_kses_allowed_html', 'my_wp_kses_allowed_html', 10, 2 );
function my_wp_kses_allowed_html( $tags, $context ) {
$tags['input']['value'] = true;
return $tags;
}
現在のサイトにおいてコメント内、要素内の属性値でショートコードを利用している場合は4.2.3へのアップデートで挙動が変わるので注意が必要です。
あと地味なところでは、4.2.3では行頭のショートコードと次行がp要素内になっているのも気になります。
[追記] 4.2.4が緊急リリースされ、その中でショートコード関連もいくつか変更になっています。
(1) <![CDATA[ ... ]]>内もコメントと同じようにショートコードが無効化されました。
(2) 4.2.3で<[shortcode]>(shortcodeは任意のショートコード名)が無効化されましたが、4.2.4で有効になりました。
ショートコードを取り除くstrip_shortcodes関数の違い
4.2.2以前の場合は所構わずショートコード部分を取り除いていましたが、4.2.3ではHTMLコメント内およびdiv要素のclass属性値は取り除かれていません。div要素のclass属性値の扱いがショートコード実行時と除外時では異なることは注意が必要でしょう。
また[と]が、それぞれ[と]と'0'が追加されています。ショートコードの除外時に行われているので、「あれっ」と思われる方がいるかもしれませんね。
足早に整理するとこんな感じ。サイトでショートコードを利用している方は、アップデート後に確認しておいたほうがいいでしょう。
最終更新 : 2018年05月27日 10:45
関連
お勧め
is_favicon(2020年4月2日 更新)
wp_kses_post_deep(2018年5月27日 更新)
wp_generator(2018年5月27日 更新)
get_post_class(2022年11月6日 更新)
get_template_directory(2018年5月27日 更新)