【问题标题】:change result of update_post_meta in database更改数据库中 update_post_meta 的结果
【发布时间】:2013-06-28 17:37:36
【问题描述】:

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";}}

【问题讨论】:

  • 我不太明白。您想直接在数据库中更改它还是想用不同的参数再次调用 update_post_meta?
  • update_post_meta 再次使用不同的参数,因此结果将是 a:1:{i:19;a:2:{s:7:"enabled";s:4:"true";s:4 :"rate";s:2:"30";}}

标签: php database wordpress


【解决方案1】:

数据:

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

什么时候是 serialized 被 WordPress 转换为如下:

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:"enabled"; 如果索引为 1 的元素,则为 7 个字符的字符串 "enabled"

...等等

您想要的序列化值似乎无效:

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

也许这会对你有所帮助(用serialize PHP function测试):

$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);

但我不建议将手动修改的数据存储为序列化,或者直接保存到 postmeta 表而不是使用 update_post_meta 函数。

【讨论】:

  • 可能应该有办法这样做stackoverflow.com/questions/2746589/…请检查
  • 有什么办法可以去掉 i:0, i:1, i:2, i:3
  • 您也可以从该值中获取一个数组,使用 unserialize php.net/manual/en/function.unserialize.php
  • 我认为你不能删除 i:0, i:1, i:2, i:3 因为这些索引是由 WP 在将数据存储在 DB 时生成的。即使我在没有这些索引的情况下测试序列化值,反序列化函数也会返回无效的序列化值。
  • 你能用这个来创作吗?
猜你喜欢
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 2019-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多