7のイベントを再登録するWindows7/8/10でRustを別ドライブに展開する際のTIPSPHP+SQLでMySQLのInnoDBのテーブルに複合キーかつ連番のINSERTを実装するネイティブなPHPでselectタグやradioボタンの選択状態をどう表現するかエンターキーによる入力項目のフォーカスの移動をWeb系システムに実装してみるCattleMute>WordPress>Polylangの関数「pll_the_languages()」で値の取得やフィルターフックを使う2019.06.21Polylangの関数「pll_the_languages()」で値の取得やフィルターフックを使う仕事で多言語サイトを作るため、多言語対応プラグインの「Polylang」を使うことになった。他にも多言語対応プラグインはいくつかあるけど、結構前にこっちの記事で触れていたことがあるように、個人的には馴染みがある。今回の記事のお題目にあるpll_the_languages()とか、件の記事で触れていたpll_current_language()とか、ワンオフ系のテーマを作るには関数が色々揃っていて都合がいいし。「面倒くさいことは大体のところプラグインにまかせとけばいいや」と思い、基本的にはこのプラグインに則ってサイトを制作することを想定していたのだが・・・。「あるカスタム投稿タイプで英語の言語スイッチのボタンを押したときにPDFを表示したいんですが。」まーた、とんでもないことをいつもやり取りしている人が言いだした。やめてくれよwwwまぁ、あーやこーや言ってもどうせやることになるんだから、と自分に言い聞かせ、半ば諦め気味で対応開始。header.phpのテンプレート側にこのように記述。);これはPolylangの公式ドキュメントを参考にして、それどおりに設定したもの。上記のコードでは、’echo’のパラメータ値は1(true)にしているが、これを0(false)にしてやれば、値を取得できる。ちなみに、’hide_if_empty’を0にしておくことで多言語用のページが無いときも、対象言語のスイッチャーを出すようにできる。functions.phpに新しく関数作って、これで値を取得して、その文字列を置換して、テンプレートで呼び出して・・・ってやってもいいんだけど。それだとpll_the_languages()にせっかく備えてあるパラメータに融通が効かなくなる上、ウィジェットで表示させる場合に対応できないのでパス。そこで、フィルターフックがないか検索してみたり、公式ドキュメンテーションをもう少し探ってみたりみたけど・・・。そんなに都合よくそれっぽい内容や記述って出てこないよね。こんなことはいつもどおりなので想定内。ソースコードをgrepしてみっか、ということでpll_the_languagesを探してみた。テンプレート関数であるpll_the_languages()のコア的な部分は、include/switcher.phpのthe_languagesメソッドに書かれており、いくつかのフィルターが掛けられている。その中で、こんな記述を発見。)あたりがくさくて、これにHTMLの値がある模様。functions.phpに以下のようにフィルターフックを記述して、これのコールバックしている第一引数が何を持っているのかを調べてみる。);これで出てきた値は、果たして目測どおり。いいぞ、いいぞ・・・。スイッチャー用のHTMLがvar_dump()で表示されている・・・いいじゃないか、いいじゃないか。‘pll_the_languages’のフィルターから$walkを弄ってやれば、出てくるHTMLの文字列の値も成形できるということがわかった。これで、あの人の無茶振りにも対応できるはずだ・・・フッフッフッ・・・。いうわけで最終的に書いたコード。);}上記はいつもやり取りしている人のオーダー通りPDFを表示できるようにしてあるが故、条件分岐のところあたりは何の応用も効かないかもしれない。実際の使い所としては、サイト制作に翻訳作業が追いついてないときとかに準備中ページを表示させたりとかに使えるかもしれないね。検索しても1分で分からんことは、大概ソースコード読めばなんとかなる。́・ω・`)カテゴリWordPressこの記事のコメントコメントはないです。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。