update_post_metaでシリアライズしたデータを書き込むと余分な情報が付加され
-
お世話になります。
WP3.0、PHP Version 5.3.1、MySQL5.1.41です。XAMPPで確認しています。
英語のトピックで似たようなトラブルに遭遇している方を見つけたのですが、私も似たような現象で困っています。
http://wordpress.org/support/topic/316122?replies=6要するに、二次元配列のデータを更新すると、
コード内でデバッグプリントで出した値:
a:7:{s:6:”cprice”;s:4:”1000″;s:5:”price”;i:333;s:8:”zaikonum”;s:3:”100″;s:5:”zaiko”;s:1:”0″;s:4:”disp”;s:0:””;s:4:”unit”;s:0:””;s:8:”gptekiyo”;s:1:”0″;}が、直後のupdate_post_meta処理で、
phpMyAdminで確認したフィールドの中身:
s:161:”s:152:”3:7:{s:6:”cprice”;s:4:”1000″;s:5:”price”;i:333;s:8:”zaikonum”;s:3:”100″;s:5:”zaiko”;s:1:”0″;s:4:”disp”;s:0:””;s:4:”unit”;s:0:””;s:8:”gptekiyo”;s:1:”0″;}”;”;のように、「s:161:」が先頭について、配列ではなく文字列で保存されてしまうのです。
コードはこんな感じにしています。
$upddate = serialize($kwords);
printf($upddate);
update_post_meta($post_id , $sku , $upddate);もしわかる方がいらっしゃいましたら、教えて頂けると大変助かります。
よろしくお願いいたします。
-
update_post_meta() 関数から呼び出される update_metadata() 関数内でデータをシリアライズしているので、二重にシリアライズされているためだと思われます。
http://core.trac.wordpress.org/browser/tags/3.0/wp-includes/meta.php#L122update_metadata() 関数が適宜シリアライズしてくれますので、update_post_meta() にはシリアライズされていないデータを渡しても大丈夫です。
シリアライズ処理を外したらうまくいきました。
ありがとうございました!
大感謝です。wokamotoさんの文言「update_metadata() 関数が適宜シリアライズしてくれますので、update_post_meta() にはシリアライズされていないデータを渡しても大丈夫です。」を、余計な事かと思ったのですが、
http://wordpress.org/support/topic/316122?replies=6
に英訳して追記しておきました。見た人が助かるかも、と。update_metadata () function, so that makes it appropriate serialized, update_post_meta () is okay to pass the data is not serialized.
ありがとうございました。
英訳ありがとうございます。
本当は update_metadata() 関数内では、 maybe_serialize() 関数を使って、シリアライズされてないデータならシリアライズし、すでにシリアライズされているデータならシリアライズしないはずなんですけど…
maybe_serialize() 関数でシリアライズされているか否かの判定がバグってるんですかね。
(未検証)
http://core.trac.wordpress.org/browser/tags/3.0/wp-includes/functions.php#L1005
- トピック「update_post_metaでシリアライズしたデータを書き込むと余分な情報が付加され」には新たに返信することはできません。