在 Woocommerce 中使用 CRUD 对象设置客户用户数据
Setting customer user data with CRUD object in Woocommerce
我正在尝试为 woocommerce 上的用户设置 first_name 的新值,我想使用 woocommerce 3.0 的最新文档中的 'CRUD Objects in 3.0' 来完成此操作。
所以我正在定义变量:
$wc_current_user = WC()->客户;
return class WC_Customer 的一个实例有一个 $data 数组,其中包含有关客户的数据,例如 $first_name、$last_name , $email, $billing_address 数组等等...
我正在尝试重写 edit-account.php 表单并想在该对象上提交此数据,他提供了 getter 和 setters 来执行此操作,但似乎 setter ins't working, he is not saving the data.
我正在这样做:
我有一个从用户那里获取名字的表单,它工作正常,我正在使用 ->get_first_name 并且工作正常。
<form class="woocommerce-account-information" action="" method="post">
<label>First Name</label>
<input type="text" name="first_name" value="<?php echo
$wc_current_user->get_first_name()?>"/>
<button type="submit">SAVE</button>
</form>
问题就在这里,当我尝试使用 setter 提交此数据时,在本例中是 'object -> set_first_name' 和 'object->save()',没有任何反应,有人可以帮助我吗?
这是我的代码:
if( isset($_POST['first_name'] ) ){
$wc_current_user->set_first_name($_POST['first_name']);
$wc_current_user->save();
}
//这个 ^ 不起作用,你知道错在哪里吗?
我很想知道新旧方法,如果有人能帮助我,那将是一个很大的帮助。谢谢!
您设置用户名字的方法正确。
set_first_name()
不会永久保存自己的值。设置完所有要更新的属性后,您需要调用 save()
方法。
if ( isset( $_POST['first_name'] ) ) {
$wc_current_user->set_first_name( $_POST['first_name'] );
$wc_current_user->save();
}
我找到了这个问题的解决方案,当你像这样使用对象时,你需要使用 Nathan 所说的 $object-save() 方法加上 $object->apply_changes();提交替换数据库中的数据:
public function apply_changes() {
$this->data = array_replace_recursive( $this->data, $this->changes );
$this->changes = array();
}
我的工作代码如下所示:
$wc_current_user = WC()->customer;
if ( isset($_POST['first_name']) ) {
$wc_current_user->set_first_name($_POST['first_name']);
$wc_current_user->save();
$wc_current_user->apply_changes();
}
我正在尝试为 woocommerce 上的用户设置 first_name 的新值,我想使用 woocommerce 3.0 的最新文档中的 'CRUD Objects in 3.0' 来完成此操作。
所以我正在定义变量:
$wc_current_user = WC()->客户;
return class WC_Customer 的一个实例有一个 $data 数组,其中包含有关客户的数据,例如 $first_name、$last_name , $email, $billing_address 数组等等...
我正在尝试重写 edit-account.php 表单并想在该对象上提交此数据,他提供了 getter 和 setters 来执行此操作,但似乎 setter ins't working, he is not saving the data.
我正在这样做:
我有一个从用户那里获取名字的表单,它工作正常,我正在使用 ->get_first_name 并且工作正常。
<form class="woocommerce-account-information" action="" method="post">
<label>First Name</label>
<input type="text" name="first_name" value="<?php echo
$wc_current_user->get_first_name()?>"/>
<button type="submit">SAVE</button>
</form>
问题就在这里,当我尝试使用 setter 提交此数据时,在本例中是 'object -> set_first_name' 和 'object->save()',没有任何反应,有人可以帮助我吗?
这是我的代码:
if( isset($_POST['first_name'] ) ){
$wc_current_user->set_first_name($_POST['first_name']);
$wc_current_user->save();
}
//这个 ^ 不起作用,你知道错在哪里吗?
我很想知道新旧方法,如果有人能帮助我,那将是一个很大的帮助。谢谢!
您设置用户名字的方法正确。
set_first_name()
不会永久保存自己的值。设置完所有要更新的属性后,您需要调用 save()
方法。
if ( isset( $_POST['first_name'] ) ) {
$wc_current_user->set_first_name( $_POST['first_name'] );
$wc_current_user->save();
}
我找到了这个问题的解决方案,当你像这样使用对象时,你需要使用 Nathan 所说的 $object-save() 方法加上 $object->apply_changes();提交替换数据库中的数据:
public function apply_changes() {
$this->data = array_replace_recursive( $this->data, $this->changes );
$this->changes = array();
}
我的工作代码如下所示:
$wc_current_user = WC()->customer;
if ( isset($_POST['first_name']) ) {
$wc_current_user->set_first_name($_POST['first_name']);
$wc_current_user->save();
$wc_current_user->apply_changes();
}