在Woocommerce

时间:2016-10-17 20:57:20

标签: php jquery wordpress woocommerce

我正在创建一个简单的插件,可以让我在用户在网站上注册时保存一些输入文本字段。这部分效果很好。

但我想让用户在用户帐户页面上编辑此字段。我可以在数据库中加载已保存的信息,但我无法在用户元数据上更新此信息。

此代码将输入放在注册页面上,如果用户点击+按钮,其他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并打印出来,并且数组包含所有输入,如上面的示例所示:

array

就像我说的那样,用户帐户配置文件会加载所需的所有输入,但最后一段代码不会更新用户元数据的信息。

1 个答案:

答案 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' );
相关问题