フクロウ(@Fukurou_Japan)です。
今回はショートコードの中にショートコードを埋め込む方法です。
これだけ聞いて『?』と思われアナタ。とりあえず読み勧めてください。
『この方法をめっちゃ知りたかった!』というアナタには朗報です。(私は実際にできて感動しました!)
ショートコードにショートコードを入れたくなった経緯とは?
ショートコードはWordpressでは有名ですので恐らくご存知ですよね。
テーマに多数用意されている場合もありますね。
編集画面などでカッコで囲って使用する例のアレです。
例えばStinger系でしたら、
[pc] pcだよ [/pc]
などと囲むとPCのみに標示される文章を書いたりできますよね。
なぜこのショートコードの中に更にショートコードを入れたくなったのかと言いますと、
私は【Post Snippets】というスニペットを作るプラグインを使用しており、そのプラグインでもショートコード表示をするのですが、これを他のショートコードで囲みたかったのです。
例を挙げるとこのような感じです。
[pc] [別のショートコード] [/pc]
残念ながら上記のようにショートコードの中にショートコード(以下、入れ子と表現)を入れると中に入っているコードは効かなくなってしまうのです。
それをぜひうまく動作させるために入れ子を実現したい! というのが今回やり方を調べ始めた始めた理由なのです。
1行でできる!ショートコードの中にショートコードを埋め込む方法!
探してみたらなんと、コードに1行を付け足すだけで完了する方法がありました!
これは感動的!
私は今回、私はfunction.phpに自分でショートカットの処理を追加しました。
ということでどこにどうコードを追加したか理解しているわけです。
ですので、作業自体も簡単でした。
ここで気をつける部分があります。
テーマに最初から用意されているショートコードを使用する場合はそこに該当するPHPのコードを修正しなければならないので、例え1行の追加であっても失敗のリスクもあります。(その場所が本当に正しいのかがわかりにくいため)
バックアップしておけばどちらの場合でも復活は簡単ですので、それだけは忘れないようにしてください。
ではやり方を說明します。
1行のコードを追加する場所
今回私が使ったコードを例に挙げます
編集前はコチラです。
if(is_mobile()) {
return '';
} else {
return '' . $content . '';
}
}
これはスマホじゃなければ何かをしなさい、というphp文ですね。
ここに1行追加します。
if(is_mobile()) {
return '';
} else {
$content = do_shortcode( shortcode_unautop( $content ) ); //ショートコードの中にショート
return '' . $content . '';
}
}
これだけです。実行したい部分のreturnの上に $content = ・・・の文言を追加するだけです。
ちなみに //以降の日本語の部分は無くてもかまいません。
これだけです!!
超簡単ですよね。
function.phpをいじるのがちょっと怖いようでしたら以前ご紹介しました、Code Snippetsプラグインを使用すると安全ですよ。
今回の1行追加の方法は以下のサイトを参考にさせていただきました。
まとめ
最初はプラグインでなんとかならないかな? と思ったのですが、ややこしくなりそうでしたので、今回はコードに直接追加する方法を選択しました。
このショートコードの入れ子ができただけでWordpressでの表現や処理の幅が広がりますので、是非活用してみてくださいね!
それではまた次回!
関連記事