添加_发布_元和更新_发布_元之间的差异

时间:2021-06-17 作者:Kuzry

我有一个关于add\\u post\\u meta和update\\u post\\u meta的问题。

使用add\\u post\\u meta时:

add_post_meta($id, \'my_meta_key\', \'my_meta_value_1\');
add_post_meta($id, \'my_meta_key\', \'my_meta_value_2\');
add_post_meta($id, \'my_meta_key\', \'my_meta_value_3\');
它会给我这样的东西:

Table 1

现在,当我得到这样的数据时:

get_post_meta(42, \'my_meta_key\')
我得到:

array (size=3)
  0 => string \'my_meta_value_1\' (length=15)
  1 => string \'my_meta_value_2\' (length=15)
  2 => string \'my_meta_value_3\' (length=15)
但我可以用另一种方式做到这一点,比如:

update_post_meta(42, \'my_meta_key\', [
    \'my_meta_value_1\',
    \'my_meta_value_2\',
    \'my_meta_value_3\',
]);
然后在数据库中,我有:

Table 2

现在,当我得到这些数据时:

get_post_meta(42, \'my_meta_key\', true)
我有同样的结果:

array (size=3)
  0 => string \'my_meta_value_1\' (length=15)
  1 => string \'my_meta_value_2\' (length=15)
  2 => string \'my_meta_value_3\' (length=15)
所以我有一个问题,这两种保存数据的方法中有一种比另一种更好吗?

或者这两种方法中的任何一种更适合于数据检索?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

这是:

update_post_meta(42, \'my_meta_key\', [
    \'my_meta_value_1\',
    \'my_meta_value_2\',
    \'my_meta_value_3\',
]);
更改单个post meta,但该值是一个数组,不能将数组放入数据库中,它需要该列的字符串。因此WordPress将其序列化为字符串并保存结果。

所以我有一个问题,这两种保存数据的方法中有一种比另一种更好吗?

对序列化数据不好,很难查询(有时不可能),额外开销很小,并且会使您面临对象反序列化攻击。

如果要存储一个包含10个内容的列表,请存储10个meta,而不是使用数组存储1个meta。如果确实必须这样做,请首先将其转换为逗号分隔的列表,或者对其进行JSON编码。

相关推荐

Reducing Database Query Time

在这里寻找一些建议。有一位客户已经在WooCommerce上工作了大约一年半。我们为他们建了一个新网站。他们开始增加一条新的家具生产线。每个项目有700-800个产品变体组合。由于从生产线中添加了大约8个新产品,当您在管理中查看产品列表时,加载需要花费很长时间。如果您快速编辑一个产品,并说将其添加到第二个类别,然后单击“更新”,则完成查询平均需要10.2-10.8秒(根据查询监视器)。意识到有700-800个变体需要迭代,如果可以理解的话,可能需要更长的时间。我已经恢复到2017主题,禁用了除woocom