よく使う処理をショートコードで使えたら便利じゃないか?と思いつき、「最新のお知らせ」みたいなループ処理ファイルをショートコードに登録。
ループ自体は正常に出力されるけど、「アイキャッチがあれば表示、無ければデフォルト画像を表示する」みたいな条件分岐はスルーされる。
このファイルを「get_template_part」で呼び出した場合ば正常に条件分岐される。
どうもこれがショートコードの仕様らしい。
これをどうにかしちゃう関数の記述例などは沢山見つかるけれど、「なぜこうなっているのか」は分からなかった。
「ショートコードを使う」 = 「記事内でPHPを動かす」なので、セキュリティ上の理由からこうなっている、のかな。
MW WP Formとか、複雑なプログラムをショートコードで呼び出すプラグインは多いけれど、あれらはどうなってるんだろうか?
とりあえず、「どうしてもショートコードで!」というわけじゃないので、素直に受け入れることに。
・ショートコードは、条件分岐などの無いシンプルな形で使う。
・クライアント様が容易に書き換えられる場所に記述するんだから、間違えて書いても消されちゃっても大きな影響がない程度に。
こんな風に使おうと思いました。