MTの外側からmt_entryの中身をちょっと拝借、などとよくやるわけですが。
entry_titleとかentry_textあたりならともかく、カスタムフィールドで作られた値を取得するっつーのはなかなか面倒でございます。
他に誰か詳しい解説なんか書いてらっしゃるかもしれませんが、ここは勢いで書いてしまいましょう。
MTの外側からmt_entryの中身をちょっと拝借、などとよくやるわけですが。
entry_titleとかentry_textあたりならともかく、カスタムフィールドで作られた値を取得するっつーのはなかなか面倒でございます。
他に誰か詳しい解説なんか書いてらっしゃるかもしれませんが、ここは勢いで書いてしまいましょう。
カスタムフィールドで作られたフィールドの値が保存される場所は言わずと知れたentry_metaですな。mysqlクライアントあたりでentry_metaを出力してみれば「ああ、確かに入れた値が入ってるねえ」てな感じでお分かりいただけると思います。
カスタムフィールドで作成するときのベースネームにハイフンがついたものの後ろに入力された文字列やら何やらが来ているような気がします。
_1- ああああ _2-(以下省略)
てなもんです。
私も最初はこの辺の値を適当に使っていたんですが、ベースネームは変更可能なうえ、確実にアンダースコアから開始する、という期待が持てないわけです。無理やりに「ハイフンから二文字前」とかでやってもいいんですが、なんとなくスマートじゃないような気がします。
それに、入力されている値の前後の空白も妙に気になります。
最初は普通の空白だろうと思ってphpのtrimを使って「これでよし」としていたのですが、FireFoxだと問題ないのにIE7ではなにやら文字化けが発生している(ほにゃらら といった具合です)。
うーんこの空白はなんだろね、と16進でDumpしてみることに。
mysqlのselect結果文字列をそのままbin2hexで変換して出力。
print bin2hex($answer['entry_meta']);
その結果がこれ
53455247000000000000000248000000010000000c 637573746f6d6669656c6473480000000200000002 5f312d00000018e38288e38186e3819be38184e381 a6e38184e38193e3818f000000025f322d000(以下略)
(実物には改行は入っていません)
おおう。普通にmysqlクライアントで見ると「customfieldsH」から始まっているのに、それより前にいろいろと入っているわけですなあ。
おわかりかと思いますが「637573...」からが「customfieldsH」に対応でございます。
まあそれはいいとして、本命の「_1-」と「_2-」の間はどうなってるか、というと
5f312d00000018e382(中略)3818f000000025f322d
「_1-」が「5f312d」、「_2-」が「5f322d」に対応しとります。
んー、「_1-」と本命データの間にはNULLが3バイトほど入ってますね。
本命データと「_2-」の間にはNULL2つと0x02……0x02ってなんだっけ?と検索してみると
「STX(Start of Text)」だそうです。わー、使ってるところ初めて見た。
とすると、
preg_match('/_1\-\0\0\0([^\0]+)/' $string, $match);
とやれば前後のNULLを含まずにキャプチャできて便利ですな。
ついでに
SELECT * FROM mt_entry WHERE entry_meta like '%_1-\0\0\0%検索語%\0%';
とかやっちゃうとentry_meta内もSQLでほぼ確実に検索できますね。時間はかかりそうですが。
http://blog.flatbit.co.jp/btlog/mt-tb.cgi/125
Comments
まだコメントはありません。よろしければコメントをどうぞ。
Post Your Comment