WordPress: フィルターより前にショートコードを実行させる

検索のしかたがよくなかったのか、日本語での情報をうまく見つけることができませんでした。そこで WordPress Code: Earlier Shortcodes をほぼそのまま訳しつつ、ここに記しておきます。

問題

僕がひっかっかった問題も、そのページのはじめにあるのとほぼ同じでした。すなわち、WordPress のショートコードは優先順位(プライオリティ)が 11 であり、そのため wpautop()wptexturize() などデフォルトのフィルター群(デフォルトの優先順位は 10)の後に実行されることになります。

たとえば

これは適当な文です。

ここに [foobar]80's pop[/foobar] などと書いたとします。

これはまた適当な文です。

という文章を書いた場合、まず wptexturize() によって 80′s pop と変換されたものが ショートコード foobar に囲まれた内容として渡され、意図しない結果になることがあります。

解決策その1

まず思いついたのはフィルターの優先順位を下げてしまおうというものでした。ちょうど Solution to WordPress adding br and p tags around shortcodes と同じです。ショートコードの処理を書くあたりに

remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_content', 'wptexturize' );
add_filter( 'the_content', 'wpautop' , 12);
add_filter( 'the_content', 'wptexturize' , 12);

と書いてしまおうというものです。

当面の問題、すなわちショートコード foobar については、これで回避されましたが、ちょっと不安が残ります。WordPress のデフォルトが「ショートコードはフィルターの後」なのですから、他の人がそれを前提に作ったものを使ったときに問題が出るかもしれません ((丹念に読む気は起きませんが、ショートコードの優先順位を wpautop() より下げた経緯が ticket 6444 あたりにありそうです。))。

解決策その2

そこでもうしばらく検索して、最初に紹介した WordPress Code: Earlier Shortcodes を見つけました。そこにあるサンプルコードを、コメントを適当に訳しながら再掲しますと、

// これは実際には何もしない。ダミー。
add_shortcode( 'foobar', '__return_false' );
 
// ショートコードの実際の処理
function foobar_run_shortcode( $content ) {
    global $shortcode_tags;
 
    // 現在のショートコード群をバックアップをとってから、すべて削除する
    $orig_shortcode_tags = $shortcode_tags;
    remove_all_shortcodes();
 
    add_shortcode( 'foobar', 'shortcode_foobar' );
 
    // ショートコードを実行 (直前の行で加えた当該のショートコードのみ)
    $content = do_shortcode( $content );
 
    // 元のショートコード群を復元する
    $shortcode_tags = $orig_shortcode_tags;
 
    return $content;
}
 
add_filter( 'the_content', 'foobar_run_shortcode', 7 );

解説

この関数は、まず登録されているショートコードの一覧が格納されている変数 $shortcode_tags を大域変数化し、それを別の変数にコピーし(後で復元させるため)、それからそれを空にします。これで登録されているショートコードは何もありません。

ここに当該のショートコードただひとつを登録し、do_shortcode() で 内容(content)に適用します。その後で、先ほど保存しておいたショートコード群を復元して登録し(ここで当該のショートコードは抹消されるので二重に適用されることはありません)ます。そしてdo_shortcode() の返り値の内容(content)を返します。

最後に、wptexturize() より前に実行されるように優先順位をつけて(1から9の値にします。ここでは 7 にします)、フィルターとして上記の関数を登録します。

感想

それにしてもなんだかまわりくどいなあと思いました。今回見つけた記事やそこに多くのコメントがあるように、ショートコードの優先順位を変更したいという需要があるのですから、登録時に自由に優先順位を設定できる関数が WordPress 本体にあってもいいように思います。

参照した記事の最も新しいコメントはつい最近のようですし、サンプルとほぼ同じコードが本体の持っているショートコード embed にも採用されているように、いまでも(いまのところ)、この方法がこの問題の解決策のようです。

2台所有する自動車の1台を手放すとき、保険は等級の高いほうを残すことができる

運転する人間が減ったので、これまで2台所有していた自動車のうち今月で車検切れとなる1台を手放すことにした。

ふと気づいたのが自動車保険(任意保険)。車の所有者はどちらも僕で、今回処分するほうは17等級、残すほうはあとから追加したので11等級、同じ保険会社で複数所有割引になっている。このままだと次年度は11等級の次の12等級の掛け金を払うのか? 17等級の保険を残して引き継ぐことはできないのか?

そこで保険会社に電話してみた。FAQ というわけではないらしく、はじめに電話に出た人には「解約のお手続きですねー」と軽く流されそうになったが、よく事情を話すと「専門の担当に回します」。その担当の人も「調べてから折り返し電話します」ということになった。

30分ほどして電話がかかってきて、「できる」とのこと。17等級のほうの契約車両を今回手放すものから残すものに変更する手続きと、11等級のほうを解約(中断)する手続きの両方を行うことになるようだ。複数所有割引は当然に解除となる。「中断」というのは、10年以内にまた別の車を所有することになったら新規の6等級や7等級からということではなく、この11等級を引き継げるというもの。その可能性はないわけではないのだから「中断」、つまり中断証明書を発行してもらうことにしよう。

余談だが、この「中断」という制度は以前からあったのだろうか? ずいぶん前のことになるが学生の頃にも長く車に乗っていて、就職して東京に出るとき手放したのだけれど、そのとき「中断」して後に継続していたらもうとっくに最上級になっていただろうに、当時さっぱりそんな話を聞いたことはなかったな。

ひとり親家庭に対する行政の支援

児童扶養手当

さて、父ひとり子ひとりの家庭となったわけだが、近くに祖父母や親戚もなく何かと心もとないため、市役所のページをいろいろと見て、まず福祉事務所に相談に行くことにした。さっそく「児童扶養手当」の説明を受けた。が、手続きはすぐには進まない。

まず、別居の事実の確認がなされなければならないらしい。元つれあいの住民登録が別のところになされていることは、役所内なのでその場で確認がすんだ。実態としての確認は民生委員の訪問を受けその報告が必要とのこと。最初の日はこれでおしまい。

民生委員の連絡先を教えられ、こちらから電話してアポイントをとらなければならない。なるほど『偽装離婚』を見分けなければならないのだろうが、これはけっこう心理的ハードルが高い。うちは円満?離婚だからまだいいが、もっと厳しい事情の人はよほど大変だろう。よくある話だが、民生委員は顔見知りの方だった。いっそ同じ町内の町会長あたりだとよかったのだが(町内会の役を辞めざるをえないため、家庭内事情を説明しないわけにはいかなかったのだ)、隣の町の微妙な距離感の方だったのでバツが悪い。数日後に来訪を受け、その後半は民生委員の愚痴(守秘義務はあるわボランティアだわまったく引き受けたくないもんだね、的な)を聞いて、確認の書類に署名をもらって終了。

さらに日をあらためて再び福祉事務所の窓口へ。その場で数枚の書類に記入していく。何度も何度も住所と名前を書く羽目になり、ひとつ書いたら済むようにならないもんですかね、と言ったら、「以前は窓口そのものがあちこちで、たらい回しだったんですよ。ここだけで済むようになってこれでもまし」といった答だった。そう思えば確かにここだけで済んでありがたい。

児童扶養手当の申請は受理されたが、決定まではしばらく時間がかかるとのこと。それにしても、つい数年前までは父子家庭ではこれを受けることができなかったとは驚きだ。やってみればわかるが、たとえ男親であっても働き方は著しく制限されるし経済的な影響は大きい。先人たちの労苦によってこの道が拓かれていてほんとうに助かる(とはいえまだこの時点ではうちの受給は決定していないのだけれど)。

医療費助成

たくさん書いた書類のひとつが医療費助成の申請。うちの自治体では小児医療費助成の対象が9歳までなのだが、ひとり親家庭だとこどもは18歳まで助成されるし、その親にも助成がある。

実際、親である僕がこれらの手続きの最中に風邪をひいてしまい病院に行くことになったのだが、ひとり親家庭の始まった日まで遡って申請できるとのことで、助かった。

広い世界に触れてみなされ

Jetpack by WordPress.com プラグインで Youtube の画を埋め込んでいるのだけれど、説明どおりにやっても小さくできない。縦は縮むのに横幅はそのまま。別の環境で見るとまたちがうのだろうか。【追記】原因がわかったので修正した。

閑話休題。

1年半ほど前にどこかで Goosehouse という集団? を知ってから妙に気に入って、 Youtube でよくこの人たちの演奏を見ている。ずっと過去まで遡って、その前身の Playyouhouse 時代のものまでつい見てしまうのだが、そんな僕にとってベスト3にはいるのが関取花&齋藤ジョニー「汽車のうた」だ(もう2人とも Goosehouse を卒業してしまったけれど)。

2人の声とギターをたぶん1本のマイクで一発で録ったであろうに、このうまさと迫力は何であろうか。シンプルなメロディが耳に残る。

そういうわけで今日もまた Youtube を見ていると、ふと「あなたへのおすすめ」に、関取花「むすめ」とある。テレビの CM らしいが、めったにテレビを見ないどころかつい先日までテレビが映りもしなかったので、まったく知らなかった。

これは効いた。

こういう唄はきっと聴く者の心持ちによって聞こえ方が違うのだろうと思う。もし1年前に聴いていたらここまで心にしみることもなかったかもしれない。僕がこの唄のような言葉を贈るのはまだずっと先のはずなのだけれど。

陽気に行こう

2人暮らしが始まった。

ただし3人から2人へ。4歳の娘とその父である僕の。

正直に言って不安は大きい。これまでは大人が2人いたから、もう1人に声をかけてちょっとした用で出かけることもできたが、4歳の子はまだ留守番もできないのでそれもできない。時間配分もどうしたらいいのか。スウちゃん(仮名)が保育園から帰ってきてから寝るまでは僕の自由になる時間はほぼなくなるだろう。これから試行錯誤だ。

さて心配ばかりしていても仕方がない。この暮らしを楽しむことにしよう。

(はて、Youtube の画を小さく挿入したいのだけれどうまくいかないぞ。これでは大きすぎる)

本当は、プライベートなことばかりだろうし、ここにこういうものを書くのはどうかという気持ちもある。それでも一方で、どこかの誰かに読まれるかもしれない、という状態に あえてしておきたい気持ちもある。というのは、この2人暮らしは「密室」になりがちなのだ。

だから、ひとつは誰かが見てくれているかもしれないという気に自分をさせることで「密室」化しないように、もうひとつは僕の「ガス抜き」となるように。

Weaver II テーマ に変えてみた。それにプラグインも追加 (その2)

このサイトの見かけを変更するためにテーマを Weaver II に変えた、というのが前回のお話。ついでに、プラグインもいろいろ入れ替えたり追加したりした。

多機能プラグイン

いつからか Jetpack by WordPress.comWP Total Hacks のように、ひとつで多くの機能を持つプラグインを使うようになった。そのために不要になったプラグインを削除した。たとえば、サイト情報の統計情報のためのスマイリー ((何もしないと画面の一番下あたりに表示される smily のこと。))を隠すとか、SNS の共有ボタンの設置やそれらへの自動投稿とか、favicon の設定とか、リビジョンコントロールの制御とか……。

追加したプラグイン

Yet Another Related Posts Plugin

以前は別の何かのプラグインで表示させていたのだがいつの間にか外していたので、このプラグインでふたたび「関連するかもしれない記事」を表示させることにした。

Picasa Express x2

数か月前から写真を Google+ 経由で Picasa に置いてみている。それをこんなふうにこちらから参照するためのプラグイン。

WP-Footnotes

ずっと前から使っているのだが、その頃にはプラグインの公式ディレクトリはなかったのか、作者のサイトから直接もらってきたか何かで、更新の通知がないためにずっとバージョン 0.9.1 のままだった ((あまりに古いのでリンクにはしないが http://www.elvery.net/drzax/2006/02/10/footnotes-0-9-plugin-for-wordpress-2-0-x/ となっているのでその頃のものだったようだ。))。この機会に探してみたらうんとバージョンが上がっていた。

CSS を管理画面で設定できるようになって便利になっていた。しかし何かの拍子にこれも含め WP-Footnotes の設定全部が消えてしまうようだ ((いまのところ明らかに、 Weaver-II テーマの設定を変更して保存するとこちらの設定が消えてしまう。))。そこで備忘録としてここに書いておく。

  • マークは [ ] で囲い、算用数字。上付
  • 脚注の最後の戻りマークは、カッコをつけず、↩

そして脚注の CSS は次のとおり。

ol.footnotes { 
    clear: both;
    border-top: solid 1px #444;
    font-size: 0.8em;
    line-height: 1.6em;
    padding: 0 2em;
}

AdSense Now!

これまでは不向きだと思って考えてもいなかったのだが、今後書いていきたい内容からすると、広告を載せてもいいかという気になってきた。サイドバーの広告はウィジェットの「テキスト」にそのまま書くことにして、個々の記事に付ける広告にはこのプラグインを使うことにした。

Amazon Widgets Shortcodes

これも広告。文中に画像や、文字へのリンクを簡単に埋め込めそうだったので、このプラグインを入れてみた。下書きで試した程度でまだ本格的には使っていないが、便利そうだ。ビジュアルエディターでしか使えないのがちょっと残念。

【2015年12月21日追記】このプラグインはその後 WordPress 本体がバージョンアップして以来、編集画面でうまく使えなくなっていた。手でショートコードを書き込めば使えていたのだが、2015年末、このブログ全体を SSL 化するに際して、とうとう対応できなくなってしまった。長らくメンテナンスされていないこのプラグインをあきらめ、AmazonJS に乗り換えることにした。