こんにちは、ぷぷのすけです。
この間、カスタムでショートコードを作成して投稿ページに
埋め込みしたらショートコードが展開されずそのまま表示されました。
この問題でハマってしまったので備忘録として残しておきます。
問題解決のために確認・試行した事
functions.phpにカスタムショートコードを登録していない
- バックアップしたfunctions.phpにソースコードを追加
- 参考にしていたfunctions.phpにソースコードを追加
単純ミスでありがちな上記の項目を確認し、本来を追加するfunctions.phpに
ソースコードがあるかを確認した。
登録したカスタムショートコードが間違っている
function custom_shortcode() { return 'カスタムショートコード'; } add_shortcode('cs', 'custom_shortcode');
1行目の「custom_shortcode」と4行目のadd_shortcodeの
第2パラメーターの「custom_shortcode」のスペルが同じか確認した。
登録したカスタムショートコードが重複している
function custom_shortcode() { return 'カスタムショートコード'; } add_shortcode('cs', 'custom_shortcode');
上記のソースコードで「cs」と「custom_shortcode」他にないか
ファイルを横断して検索して確認した。
投稿記事に書いたショートコードが間違っている
投稿記事に書いたショートコード→[cs]が間違っていないか確認した。
- [cs]がカッコを含め全角になっていないか?
- [cs]の[ ]が間違っていないか? 例:{ }「」
- [cs]が[sc]になっていないか?
テンプレートファイルに書く時の書式になっている
<?php echo do_shortcode('[cs]'); ?>
投稿記事の場合、記事中に[cs]と書けばいいが、たまに頭が混乱して
上記のソースコードを書いてしまっている場合がある。
投稿記事内なのでPHPのソースコードは動かないしそのまま表示される。
原因はget_the_content()
前述した項目を全て確認したが、ショートコードはそのまま表示される現象が続いていました。
そこで以前同じような事をやったソースコードと見比べてみるとある違いを発見!
以前のソースコードではthe_content()を使っているのに
今回のソースコードではget_the_content()を使っている・・・
もしやと思いthe_content()に直すとあっさりと解決!
関数リファレンス/get_the_contentを見るとこのように書いてある↓
重要:the_content() と異なり、get_the_content() はフィルター ‘the_content’ を適用せずにコンテンツを返します。すなわち、get_the_content() は動画の自動埋め込みや、ショートコードの展開などを実行しません。
リファレンスは良く読もうね!
しかし、リファレンスに書いてあっても問題が起きてハマらないと記憶に残らない。
あゝ凡人エンジニアの悲しい性かな…