正在序列化UPDATE_USER_META的用户角色

时间:2014-09-17 作者:Kevin Nugent

我创建了一个自定义用户角色,并试图将用户角色从CUSTOMER更改为购买特定产品的倡导者(使用WooCommerce)。我非常接近,但很难将正确序列化的数据放入我的表中:

$order = new WC_Order( $order_id );
$items = $order->get_items();

$new_role = \'Array([advocate] => 1)\';
$data = serialize( $new_role ); 

if ( $product_id == \'786\' ) {
    update_user_meta( $order->user_id, \'wp_capabilities\', $data );
}
在正确的时间填充正确的表,但作为

s:30:"s:22:"Array([advocate] => 1)";";
而不是我所需要的

a:1:{s:8:"advocate";b:1;}
我的序列化哪里出错了?

3 个回复
最合适的回答,由SO网友:Domain 整理而成

我认为您没有正确处理阵列部分。正确的语法是-

$new_role = array("advocate" => 1);
当您在屏幕上打印一些数组时,会显示您使用的语法,但它应该在PHP代码中以上述格式编写。当前,您将其捕获为字符串而不是数组。

SO网友:Kevin Nugent

除了上面WisdmLabs的语法更正之外,我还发现我有效地序列化了字符串,这是使用update\\u user\\u meta时自动序列化字符串的两倍。我不确定从哪一点开始我自己将其序列化,但显然这是完全没有必要的。

http://codex.wordpress.org/Function_Reference/update_user_meta

SO网友:Joseph Persie III

序列化字符串中的b表示布尔值。因此,您需要使用true而不是1。序列化它会导致双重序列化,这在一开始就解释了“s:25:”。尝试以下操作:

update_user_meta(46, \'wp_capabilities\', array(\'employer\'=>true));

结束

相关推荐