[WordPress]ショートコードとカスタムフィールドとjson_encodeで躓いた点

作成日:

やりたかったこと

余り重要性の高く無い入力値にそれぞれカスタムフィールドを宛がうのはデータベースの肥大化に繋がるという懸念があったので、ショートコードを入力フォームの代替として、入力値をjson形式に変換し、カスタムフィールドへラベリングして保存したい。

起こったトラブル

ショートコード内に記述した「"(ダブルクォーテーション)」が勝手に変換されてしまう。

例えば[html][/html]と入力して、入力値をjson_encodeをかけて保存すると、何故か「"(ダブルクォーテーション)」が、本来であれば、
2014-08-18_13h34_01

Unicode Decimal Code " http://www.codetable.net/decimal/34

Code Table - Alt Codes, Ascii Codes, Entities In Html, Unicode Characters, and Unicode Groups and Categories

でなければならないのに。
2014-08-18_13h32_22

Unicode Decimal Code ″ http://www.codetable.net/decimal/8243

Code Table - Alt Codes, Ascii Codes, Entities In Html, Unicode Characters, and Unicode Groups and Categories


2014-08-18_13h32_31

Unicode Decimal Code ” http://www.codetable.net/decimal/8221

Code Table - Alt Codes, Ascii Codes, Entities In Html, Unicode Characters, and Unicode Groups and Categories

変換されていた。

エンコードの際の失敗か、色々検証してみたのだけど、結局は「WordPressの仕様」であることは判明。

WordPressで引用符が勝手に変換されないようにする方法 | えすたくぶろぐ http://staku.designbits.jp/disable-wptexturize/

WordPressで引用符(クォーテーション)を使うと、勝手に意図しない文字に変換されてしまいますが、これ結構鬱陶しいですよね。 具体的にはこんな感じです。 ’ほげほげ’ ⇒ ‘ほ...

文字列の整形のために、自動で変換されるとのこと。
記事内の通りfunctions.phpに[php]remove_filter('the_title', 'wptexturize');
remove_filter('the_content', 'wptexturize');
remove_filter('the_excerpt', 'wptexturize');[/php]記述することで、変換は停止出来た。

htmlentitiesの解釈がおかしい(?)

先の通り、iframeのコードをjson形式に変換してカスタムフィールドに保存するためには、コードをエスケープしておく必要があります。
しかし、ここでも問題が起こり、「"(ダブルクォーテーション)」は「&quot;」に変換されるのだけど、「<」と「>」がそれぞれ「&amp;lt;」、「&amp;gt;」と変換されてしまう。
おそらく「&lt;」の「&」をさらに変換しているのだろうと推測するも、解決方法がわからず。

最終的には表示の際に文字置換でもしようかと思っていた矢先、開発環境であるところのWebMatrixで以下のようなコードヒントが表示されました。
2014-08-18_13h50_02

Function Reference/htmlentities2 « WordPress Codex http://codex.wordpress.org/Function_Reference/htmlentities2

通常、htmlコードをエスケープするにはhtmlentitieshtmlspecialcharsを使えば良いと思うのですが、WordPressの関数の中に同様の機能が備わっている様子。「&」が2回変換されるのも、WordPressの仕様によるものであるかもしれないと、これを使ってみたところ正しく変換出来ました。

めでたし。

追記:
iframeのタグがおかしかったのはビジュアルエディタに直接書いていたがためだった・・・。
ただの阿呆モノだった。

物草 灸太郎

WordPressでホームページを制作しつつ、休日は畑を耕したりDIYを楽しんでいます。

コメントをどうぞ

  • メールアドレスが公開されることはありません。
  • コメント欄にURLは入力できません。
  • このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシー利用規約が適用されます。