此代码是您的问题:
$s2_custom=get_user_meta($u->ID, \'wp_s2member_custom_fields\');
$real = $s2_custom[0];
$real[\'loomsong_del\']=\'email\';
update_user_meta($u->ID, \'wp_s2member_custom_fields\',$real);
get\\u user\\u meta返回一个元值数组。因为在这种情况下,数组只有一个值,所以需要将单个参数传递给它。
尝试以下操作:
$s2_custom=get_user_meta($u->ID, \'wp_s2member_custom_fields\', true);
$s2_custom[\'loomsong_del\']=\'email\';
update_user_meta($u->ID, \'wp_s2member_custom_fields\',$s2_custom);
顺便说一句,这不会修复数据库中已经损坏的数据。您需要手动或通过代码来修复,以读取损坏的数组并重建正确的数组。
编辑:为了澄清我在说什么。。。
元数据可以作为单独的行存储在数据库中,所有的元函数都假设您正在这样做,即使您没有这样做。
所以如果我打电话add_user_meta(1, \'foo\', \'value1\');
和add_user_meta(1, \'foo\', \'value2\');
, 实际上,我在那里的数据库中有两行。
如果我那时打电话get_user_meta(1, \'foo\');
然后,代码实际返回一个包含value1和value2的数组。对我来说,它将这些单独的行组成一个数组。
现在,如果我实际上只有1个条目,那么我不一定需要将其包装在数组中。那样的话我可以打电话get_user_meta(1, \'foo\', true);
要仅返回第一个结果,一行本身不包含数组换行。这种隐藏的数组包装是您第一次使用的,因为它在一个您意想不到的数组中发回了一个数组。
解决问题基本上意味着遍历并读取元数据,在数组中找到所需的实际数据,然后正确修改它并将其更新回数据库。