因此,我正在尝试更新之前使用此函数存储的用户元数据数组:
function oe_charge_customer( $customer ) {
// load the stripe libraries
require_once(STRIPE_BASE_DIR . \'/lib/Stripe.php\');
// check if in test mode or not
check_stripe_api();
// counter
$i = $customer[\'i\'];
// get user meta, if any
$payment_args = get_user_meta( $customer[\'user_id\'], \'oe_customer_details\' );
// update paid value to true
$payment_args[0][\'payments\'][$i][\'paid\'] = 1;
// attempt to charge the customer\'s card
try {
$charge = Stripe_Charge::create(array(
\'amount\' => $customer[\'amount\'] * 100,
\'currency\' => \'usd\',
\'customer\' => $customer[\'cust_id\']
)
);
// update user profile to show paid
update_user_meta( $customer[\'user_id\'], \'oe_customer_details\', $payment_args );
} catch (Exception $e) {
wp_die($e);
}
}
我得到了一些预期的结果,但每次更新时它都会不断地将其放入一个新的数组中。知道为什么会这样吗?我似乎无法控制自己。更新后,我得到以下信息:
Array
(
[0] => Array
(
[0] => Array
(
[0] => Array
(
[0] => Array
(
[0] => Array
(
[customer] => Array
(
[name] =>
[id] => cus_2Oo1hyvYyZsaj0
[user_id] => 18
)
[payments] => Array
(
[0] => Array
(
[amount] => 16
[date] => 1376710188
[paid] => 0
)
[1] => Array
(
[amount] => 4
[date] => 1376710238
[paid] => 0
)
)
)
[payments] => Array
(
[0] => Array
(
[paid] => 0
)
)
)
)
[payments] => Array
(
[1] => Array
(
[paid] => 1
)
)
)
)
)
最合适的回答,由SO网友:epilektric 整理而成
看起来像是get_user_meta()
返回类似这样的数组。
array(2) {
[0]=>
array(1) {
[0]=>
}
[1]=>
array(1) {
[0]=>
}
}
那么什么时候
update_user_meta()
将数组存储在另一个数组中,如下所示
编辑:事实证明get_user_meta()
在获取结果时将其封装在数组中。
array(1) {
[0]=>
array(2) {
[0]=>
array(1) {
[0]=>
}
[1]=>
array(1) {
[0]=>
}
}
}
然后,它会再次被检索和保存,每次都会添加一个新的级别。
对于这个问题,有一个简单但违反直觉的解决方案。设置的最后一个参数get_user_meta()
到true.
get_user_meta($id,$key,true);`
如果是的话
false 它返回一个数组,如果是
true 它返回一个值,该值可以是数组本身。
此处提供更多信息。https://stackoverflow.com/questions/7746887/storing-php-arrays-in-wordpress-user-meta-database