apply_shortcodes() は、WordPress 5.4 以降に登場した関数で、投稿やページだけでなく、任意の文字列内のショートコードを解析・展開するために使用します。
do_shortcode() と機能は同じですが、より命名が直感的であり、今後は apply_shortcodes() の使用が推奨されています。
目次
機能の説明
このテンプレートタグは、文字列内のショートコードをパースして、その出力に置き換える関数です。通常の投稿本文以外の場所、例えばウィジェット、カスタムフィールド、オプションなどでもショートコードを機能させたいときに使います。¥
シンプルなコード例
echo apply_shortcodes( 'この中に [shortcode] が含まれています。' );[shortcode] に対応するショートコード関数が登録されていれば、その出力に変換されて表示されます。
使い方の説明
基本構文
apply_shortcodes( string $content ): string引数
| 引数 | 説明 |
|---|---|
$content | ショートコードを含む文字列 |
使用例
add_shortcode( 'hello', function() {
return 'こんにちは、世界!';
} );
$text = '挨拶:[hello]';
echo apply_shortcodes( $text );
// 結果: 挨拶:こんにちは、世界!一緒に使うことが多い関連タグ
add_shortcode()
add_shortcode( 'current_year', function() {
return date('Y');
} );- 任意のショートコードを登録するための関数
apply_shortcodes()とセットで使うことで、動的なテキストを生成できる
do_shortcode()
echo do_shortcode( '[current_year]' );- 機能的には
apply_shortcodes()と同等 do_shortcode()は旧来の関数だが、現在も使用可能- 新しいテーマやプラグインでは
apply_shortcodes()の方が推奨される
shortcode_exists()
if ( shortcode_exists( 'hello' ) ) {
echo apply_shortcodes( '[hello]' );
}- ショートコードが登録されているかをチェック
- フロントエンドでのエラー防止に役立つ
追加情報で取得したい場合
do_shortcode() との比較
// 旧方式
echo do_shortcode( '[shortcode]' );
// 新方式(推奨)
echo apply_shortcodes( '[shortcode]' );- 機能は全く同じ
- 命名がわかりやすい
apply_shortcodes()を推奨
カスタムフィールドにショートコードを適用したい場合
$content = get_post_meta( get_the_ID(), 'custom_field', true );
echo apply_shortcodes( $content );ショートコードを保存したカスタムフィールドなどにも展開可能
このテンプレートタグを利用してのカスタマイズ
ウィジェットタイトルや説明にショートコードを反映
$widget_title = get_option( 'custom_widget_title' );
echo apply_shortcodes( $widget_title );ACF などのプラグインと連携
$text = get_field( 'text_with_shortcode' );
echo apply_shortcodes( $text );ショートコードを含むテキストを保存している項目にも応用可
想定されるトラブル
ショートコードが実行されない
apply_shortcodes() を使っても出力がそのまま [shortcode] のように表示される。
解決方法
add_shortcode() によるショートコードの登録が正しくできているか、または shortcode_exists() で存在チェックをする。
HTML内でうまく展開されない
解決方法:
ショートコードの出力内容が HTML を含む場合、フィルタフックや出力エスケープとの兼ね合いを調整する必要があります。wp_kses_post() などが適用されていないか確認。
Q&A
まとめ
apply_shortcodes()は 文字列中のショートコードを展開するための新しい関数do_shortcode()と同様の働きをしつつ、命名が明確で今後の標準に- 任意の文字列(カスタムフィールド、オプション、ウィジェットなど)にも使える
add_shortcode()やshortcode_exists()などと組み合わせるとさらに便利- トラブル回避のため、ショートコード登録状況のチェックを事前に行うと安心
コメント