Dealing with shortcode madnessというナイスエントリーを見つけたので、以前から思っていたことを。WordPressにはショートコードAPIというのがあります。以下のように書くといろんな機能を実現してくれるというものです。Xoopsとかで使われていたBBcodeに似ていますね。
[hoge var=987923]
いまはショートコードを作りやすくするプラグインなどもあるので、使っている人も多いことでしょう。たとえば、このブログではtmkm-amazonというプラグインを使っていて、これはAmazonのアフィリエイトリンクを表示してくれます。こんな感じ。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)
さて、件のエントリーではだいたい以下のようなことが語られていました。
- 最近Theme Forestとかを見ていると、どうでもいいショートコードを搭載したテーマが増えているようだ
- pタグにclass属性を付与するだけのショートコードになんの意味があるのか
- テーマに付属のショートコードを使ってしまうとそのテーマに縛られるのでよくない!
これに対し、コメントではこんな議論がありました。
- たしかにその通りだけど、ショートコード便利だよ!
- テーマに縛られるって、テーマ開発者からすればおいしいよね
- クライアントにそんなこと行っても意味ない
- TinyMCEカスタマイズしてボタンつければ全部解決
- いまなら同意できるけど、正直初心者のときはdivでくくるだけのショートコード作ってたよ!
いわゆる「べき論」なので、意見はそれぞれだと思います。個人的に「divでくくるだけならTinyMCEのボタン作れや」という意見には賛成なので、手前味噌ですが、TinyMCEをチキチキにカスタマイズするなどを読んでください。
さて、人の書いたブログを紹介するだけではしょうがないので、これから僕が考えるショートコードの「べき論」を展開してみたいと思います。
ショートコードのいいところと悪いところ
ショートコードのいいところはもちろん便利なところですが、「誰にとって便利か」というと、作る人にとって便利ということですね。使う側にとってはHTMLもショートコードもマークアップの仕方が違うだけで大して変わらないので、上のエントリーで述べられているようにボタン作ってくれるのが一番いいんでしょうが、TinyMCEのボタンを作るのはけっこうめんどくさいです。ショートコード作って「はい、終り!」ってできるとすごい楽です。その結果として、沢山のショートコードが生まれましたね。「functions.phpに貼っておいてね!」で動くんですから。
一方、悪いところは投稿内に明らかなゴミデータが混入してしまうことです。これはよくあるケースですが、そのテーマやプラグインがWordPressコアのバージョンアップに追随しなくなったとき、これが露見します。テーマに引きずられてバージョンアップできなかったり、他のテーマを使えなかったりする場合もあれば、プラグイン作者が開発を停止してしまってむき出しのショートコードが投稿内に表示されることもあります。上述したWP Tmkm Amazonの場合はけっこう長い間使っていたのに開発者さんがモチベーションを失って開発を終了してしまったので、自分で修正して使い続けています。
というわけで、「利便性」と「失ったときのリスク」をはかりにかけてショートコードを使う必要がありそうです。「とりあえず使ってみる」のは避けるべきかもしれません。
ショートコードはどんなときに使うべきか
これはテーマ・開発者側の視点です。次の2つぐらいしか思いつかないですね。
- 動的に内容が変更されるもの(AmazonやTwitterのAPIを叩いたり、ユーザーによって表示を変えたり)
- YoutubeやGoogleマップの埋め込みタグのように、出力されるコードの動的な変更は必要としないが、先方の都合で仕様が変わりうるもの
2に関しては、外部APIよりもプラグイン・テーマ作者が力つきる方が先のような気もします。
ショートコードを使わなくなったらどうする?
テーマを変更したり、プラグインを停止したりして使われなくなったショートコードはそのまま出力されてしまいます。これでは困るので、表示されないようにしましょう。
function _abandoned_shortcodes($atts, $content=''){ return $content; } //ショートコードの数だけ登録。hogeの部分をショートコードに add_shortcode('hoge', '_abandoned_shortcodes'); add_shortcode('fuga', '_abandoned_shortcodes');
これで囲み型も独立型もいけるんじゃないかと思います。場合によっては空行ができてしまったりするとは思いますが、しょうがないですね。もしショートコードを一括削除するプラグインとかあったら、教えてください。
WordPressのプラグインとテーマは分離できるのか
この問題の原因は、プラグインとテーマの役割がかぶっていることにつきると思います。WordPressはウィジェットやショートコード、管理画面の作成など、ほとんどのことをテーマから出来てしまいます。
テーマがいわゆるMVCモデルのビューファイルのようなものであれば、こうした問題は発生しなかったでしょう。ただ、その場合はここまで普及したか疑問ですね。PHP自体がそもそもそういう言語ですが、あまりスキルの高くない人でもそれなりのことができてしまうというのがWordPressの魅力なので。
きちんとしたガイドラインがあれば嬉しいことは嬉しいのですが、正典なきWebの世界ではガイドラインを作ることも参加者の役割なので、いろんな人の書いたいろんな記事を参考にしていくしかないですね。この記事もその一助になることを祈って、筆を置きます。