0

WordPress 配列に問題がありpost_meta、データベースに間違った詳細を送信するため、データベースの結果を変更したいので、update_post_meta投稿メタの下で使用します:

update_post_meta($post_id, '_wpsc_vendors', array(19,'enabled',true,rate,30 ));

このポストメタ キーと値を生成します。

key: _wpsc_vendors
value: a:5:{i:0;i:19;i:1;s:7:"enabled";i:2;b:1;i:3;s:4:"rate";i:4;i:30;}

今、データベースでこれも結果値を変更したい:

a:1:{i:19;a:2:{s:7:"enabled";s:4:"true";s:4:"rate";s:2:"30";}}
4

1 に答える 1

3

データ:

array(19,'enabled',true,rate,30 )

WordPress によってシリアル化されるwhen は、次のように変換されます。

a:5:{i:0;i:19;i:1;s:7:"enabled";i:2;b:1;i:3;s:4:"rate";i:4;i:30;}

意味:

a:5:は 5 項目の配列です

i:0;i:19; は、インデックス 0 "i:0"、値整数 19 を持つ最初の要素です

i:1;s:7:"有効"; インデックス 1 の要素の場合、7 文字の文字列「有効」

... 等々

必要なシリアル化された値は有効ではないようです:

a:1:{i:19;a:2:{s:7:"有効";s:4:"真";s:4:"速度";s:2:"30";}}

多分これはあなたを助けるでしょう(シリアライズPHP関数でテスト済み):

$b = array('19'=>array("enabled","true","rate","30"));
echo serialize($b);

// Prints:
a:1:{i:19;a:4:{i:0;s:7:"enabled";i:1;s:4:"true";i:2;s:4:"rate";i:3;s:2:"30";}}

値をテーブルに直接保存/更新する場合は、次の操作を実行できます。

global $wpdb;
$sql = "UPDATE $wpdb->postmeta SET meta_value = '$meta_value' WHERE meta_key = '_wpsc_vendors' AND post_id = $post_id";
$wpdb->query($sql);

ただし、手動で変更されたデータをシリアル化されたと見なされるように保存したり、 update_post_meta 関数を使用する代わりに postmeta テーブルに直接保存したりすることはお勧めしません。

于 2013-07-01T17:23:36.490 に答える