我正在创建一个简单的插件,可以让我在用户在网站上注册时保存一些输入文本字段。这部分效果很好。
但我想让用户在用户帐户页面上编辑此字段。我可以在数据库中加载已保存的信息,但我无法在用户元数据上更新此信息。
此代码将输入放在注册页面上,如果用户点击+
按钮,其他4个可能的输入将通过jquery动态添加。
add_action ('register_form', 'save_dynamic_inputs', 10);
function save_dynamic_inputs() {
$user_cnpj = ( isset( $_POST['user_cnpj_1'] ) ) ? $_POST['user_cnpj_1'] : '';
$user_cnpj = ( isset( $_POST['user_cnpj_2'] ) ) ? $_POST['user_cnpj_2'] : '';
$user_cnpj = ( isset( $_POST['user_cnpj_3'] ) ) ? $_POST['user_cnpj_3'] : '';
$user_cnpj = ( isset( $_POST['user_cnpj_4'] ) ) ? $_POST['user_cnpj_4'] : '';
?>
<div class="cnpjs"><p><label for="user_cnpj_1"><?php _e( 'CNPJ', 'save_dynamic_inputs' ) ?><br /><input type="text" name="user_cnpj_1" id="user_cnpj_1" class="input" style="width: 445px; value="<?php echo esc_attr( stripslashes( $user_cnpj ) ); ?>" size="19" /><i class="button addmore fa fa-plus" aria-hidden="true"></i></label></p></div>
<?php
}
另一个代码保存每个输入,如果它们存在于用户元数据中,并且此代码有效,但它适用于寄存器形式:
add_action( 'user_register', 'saving_my_dynamic_inputs', 10, 1 );
function saving_my_dynamic_inputs( $user_id ) {
for ($i = 1; $i < 5; $i++) {
if ( isset( $_POST['user_cnpj_'.$i] ) )
update_user_meta($user_id, 'user_cnpj_'.$i, $_POST['user_cnpj_'.$i]);
}
}
这是我用来更新用户编辑帐户页面上的用户元数据的代码,此代码不起作用。
add_action('woocommerce_created_customer', 'update_fields_profile_user_woo', 10, 1);
function update_fields_profile_user_woo($customer_id) {
if ( isset( $_POST['user_cnpj_1'] ) ) {
update_user_meta($customer_id, 'user_cnpj_1', $_POST['user_cnpj_1']);
} else {
echo "<pre>",print_r($_POST),"</pre>";
exit();
}
}
您可以阅读woocommerce_created_customer
,我尝试了woocommerce_save_account_details
和其他人。
我不明白为什么输入不会更新用户元数据。我试图将表单指向一个php文件,该文件获取$ _POST var并打印出来,并且数组包含所有输入,如上面的示例所示:
就像我说的那样,用户帐户配置文件会加载所需的所有输入,但最后一段代码不会更新用户元数据的信息。
答案 0 :(得分:1)
Woocommerce通过表单Form Handler Class处理所有表单。您需要创建该类的实例并调用其save_account_details
方法。
与wp挂钩的另一种方法。始终在初始化时调用它。
function save_wc_additional_details() {
$user_id = get_current_user_id();
if( isset( $_POST['user_cnpj_1'] ) )
update_user_meta( $user_id, 'user_cnpj_1', sanitize_text_field( $_POST['user_cnpj_1'] ) );
if( isset( $_POST['user_cnpj_2'] ) )
update_user_meta( $user_id, 'user_cnpj_2', sanitize_text_field( $_POST['user_cnpj_1'] ) );
if( isset( $_POST['user_cnpj_3'] ) )
update_user_meta( $user_id, 'user_cnpj_3', sanitize_text_field( $_POST['user_cnpj_1'] ) );
if( isset( $_POST['user_cnpj_4'] ) )
update_user_meta( $user_id, 'user_cnpj_4', sanitize_text_field( $_POST['user_cnpj_1'] ) );
}
add_action( 'wp', 'save_wc_additional_details' );