お問い合わせはコチラから

WordPressのショートコードが展開されない時の対処方法

サイト運営

WordPressでタグの内部にショートコードを埋め込むことは結構あります。その時にタグの内部のショートコードが展開されず、なんで?と思って調べた時のことをまとめておきます。

ショートコードが展開されないのはどんな場面?

HTMLサイトなどをWordpressに載せかえる時に、画像やファイルのパスを指定している箇所をテンプレート関数に置き換えることがあります。

この時、テンプレートファイルの中であれば、PHPコードがそのままかけるので問題は起きません。しかし、記事内の場合はそのままPHPコードが書けないのでショートコードに置き換える必要があります。

例えば、次のようなget_template_directory_uri()を出力するショートコードを作るとします。

function bfp_get_template_directory() {

    $directory = get_template_directory_uri();
    // Code
    return $directory;
}
add_shortcode( 'template_directory', 'bfp_get_template_directory' );

このショートコードを使って、HTMLのパスの部分を置き換えると、記事内でもテンプレートタグが間接的に使えるようになります。

HTMLタグ内でショートコードが展開される例

WordPressの初期状態でも、imgタグのsrcはショートコードが展開されます。

<picture>
    <img src="[shortcode]/voice02-img02.jpg"><!--- 展開される --->
</picture>

HTMLタグ内でショートコードが展開されない例

WordPressの初期状態では、sourceタグのsrcsetや、scriptタグのsrcに書かれたショートコードは展開されません。

<picture>
  <source media="(min-width:768px)" srcset="[shortcode]/voice02-img02-pc.jpg"><!--- 展開されない --->
</picture>
<script src="[shortcode]/js/script.js"></script><!--- 展開されない --->

なぜHTMLタグ内でショートコードが展開されない?

4.2.3で修正されたクロスサイトスクリプティング脆弱性の修正による仕様の制限です。

1.HTMLコメント内のショートコードを使用不可にした。

2.HTML要素内の属性値のショートコードを標準では一部使用不可にした(input、select、optionなど)。

3.HTML要素外(例えば行頭にあるショートコード)については特に制限していない。

https://ja.wordpress.org/support/topic/%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3423%e3%81%ab%e3%82%a2%e3%83%83%e3%83%97%e3%83%87%e3%83%bc%e3%83%88%e3%81%99%e3%82%8b%e3%81%a8%e3%80%81input%e3%81%aevalue%e3%81%ab%e3%82%b7%e3%83%a7/

HTMLタグ内でショートコードを使えるようにするには?

以下のフックで書き換えると使えるようになります。

ルールとしては、$tag[タグ名][アトリビュート名]という感じだと思います。

以下の例では、imgタグのsrcset、sourceタグのsrcを追加しています。

add_filter( 'wp_kses_allowed_html', 'my_wp_kses_allowed_html', 10, 2 );
function my_wp_kses_allowed_html( $tags, $context ) {
	$tags['img']['srcset'] = true;
	$tags['source']['src'] = true;
	return $tags;
}

Contact form 7のフォーム内でショートコードが展開されない

同じような理由で、Contact form 7のフォーム内も、ショートコードが展開されません。

対策は簡単です。

以下のコードをfunctions.phpに追加することで、フォーム内のショートコードが展開されるようになります。

このTipsは結構使えると思います。

add_filter( 'wpcf7_form_elements', 'mycustom_wpcf7_form_elements' );

function mycustom_wpcf7_form_elements( $form ) {
$form = do_shortcode( $form );

return $form;
}

ウィジェットエリアのショートコードが展開されない時の対策

ウィジェットエリアのタイトルや本文エリアに記載したショートコードが展開されない時の対処方法は以下の記事にまとめてあります。

まとめ

HTMLサイトをWordpressにするときに、パスを取得するテンプレートタグをショートコードに置き換えるのは当たり前に行われます。

しかし、imgタグのsrc以外は基本展開されないというのがWordpressの基本仕様です。

もし展開されないショートコードがあったら、今回の記事を参考に例外を追加していって展開されるようにしましょう。

この記事を書いた人
ブーン

はるばる日本よりオランダ王国へやってまいりました。
自分の経験が少しでも参考になれば嬉しいです。
お問い合わせは、『こちら』からお願い致します。

\ブーンをフォロー/
スポンサーリンク
サイト運営
\シェアお願いします!/
\ブーンをフォロー/
こんな記事も読まれています

失敗しないレンタルサーバーランキング

mixhost

不正アクセスに強くて使いやすいおススメサーバー
\本サイトで利用中/
メリット①:自動ウィルス駆除対応
メリット②:サイトの表示速度が速い!
メリット③:転送量の上限が多い!
メリット④:自由にプラン変更ができ、アクセス増にも対応できる!
メリット⑤:バックアップデータが無料で復元できる!
メリット⑥:Wordpressが簡単にインストールできる!
メリット⑦:どのプランでも初期費用が無料!
メリット⑧:10日間の無料お試し期間と30日の返金保証!

Conoha Wing

国内Wordpress最速の最強サーバー
メリット①:圧倒的な表示速度
メリット②:レンタルサーバーと独自ドメインがセットでお得◎
メリット③:プラン変更はすべてのプランで自由自在
メリット④:一か月の利用転送量の制限が緩い(9TB~)
メリット⑤:WordPresサイトの移行が簡単

エックスサーバー

国内シェアNo1の安定性と実績が魅力。ALL SSDで死角なしの万能サーバー。
メリット①:サイトの表示速度が安定して速い!
メリット②:アクセス負荷に強くて安定性が高い!
メリット③:24時間365日の充実サポートで安心!電話サポートもあり!
メリット④:転送量が多い!
メリット⑤:自動バックアップ機能付き!
メリット⑥:WordPressが簡単にインストールできる!
メリット⑦:10日の無料お試し期間がある!

タイトルとURLをコピーしました