WooCommerce注册表单中需要用户角色选择。用户应该有一个下拉菜单,可以选择" customer"和"经销商" (ID)wordpress角色。不幸的是,我尝试组装代码失败了。
以下代码未指定所选角色,而且我被卡住了。注册用户仍然可以获得默认角色"客户"虽然"经销商"被选中了。
我已经更改the code from this answer(我不知道此代码是否正常工作)
我做错了什么?
我正在使用的代码:
/* To add WooCommerce registration form custom fields. */
function WC_extra_registation_fields() {?>
<p class="form-row form-row-first">
<label for="reg_role"><?php _e( 'Privat or commercial?', 'woocommerce' ); ?></label>
<select class="input-text" name="role" id="reg_role">
<option <?php if ( ! empty( $_POST['role'] ) && $_POST['role'] == 'customer') esc_attr_e( 'selected' ); ?> value="customer">private</option>
<option <?php if ( ! empty( $_POST['role'] ) && $_POST['role'] == 'reseller') esc_attr_e( 'selected' ); ?> value="reseller">commercial</option>
</select>
</p>
<?php
}
add_action( 'woocommerce_register_form', 'WC_extra_registation_fields');
/* To validate WooCommerce registration form custom fields. */
function WC_validate_reg_form_fields($username, $email, $validation_errors) {
if (isset($_POST['role']) && empty($_POST['role']) ) {
$validation_errors->add('role_error', __('Role required!', 'woocommerce'));
}
return $validation_errors;
}
add_action('woocommerce_register_post', 'WC_validate_reg_form_fields', 10, 3);
/* To save WooCommerce registration form custom fields. */
function WC_save_registration_form_fields($customer_id) {
//Role field
if (isset($_POST['role'])) {
update_user_meta($customer_id, 'role', sanitize_text_field($_POST['role']));
}
}
add_action('woocommerce_created_customer', 'WC_save_registration_form_fields');
答案 0 :(得分:4)
用户角色&#34;经销商&#34;需要在Wordpress中首先创建。这可以使用代码或by a plugin完成,但这不是此问题/答案的目的。
用户角色使用wp_usermeta
meta_key
在wp_capabilities
表中注册了一组值,因为用户可以拥有许多用户角色。
在Woocommerce注册中,用户无论如何都会注册'customer'
用户角色。因此您只需对'reseller'
选项进行更改。
此时你可以做两件事:
所以你的代码将是:
add_action( 'woocommerce_register_form', 'wc_extra_registation_fields' );
function wc_extra_registation_fields() {
?>
<p class="form-row form-row-first">
<label for="reg_role"><?php _e( 'Privat or commercial?', 'woocommerce' ); ?></label>
<select class="input-text" name="role" id="reg_role">
<option <?php if ( ! empty( $_POST['role'] ) && $_POST['role'] == 'customer') esc_attr_e( 'selected' ); ?> value="customer">private</option>
<option <?php if ( ! empty( $_POST['role'] ) && $_POST['role'] == 'reseller') esc_attr_e( 'selected' ); ?> value="reseller">commercial</option>
</select>
</p>
<?php
}
// Validate WooCommerce registration form custom fields.
add_action( 'woocommerce_register_post', 'wc_validate_reg_form_fields', 10, 3 );
function wc_validate_reg_form_fields($username, $email, $validation_errors) {
if (isset($_POST['role']) && empty($_POST['role']) ) {
$validation_errors->add('role_error', __('Role required!', 'woocommerce'));
}
return $validation_errors;
}
你将添加这个:
CASE 1 :
// To save WooCommerce registration form custom fields.
add_action( 'woocommerce_created_customer', 'wc_save_registration_form_fields' );
function wc_save_registration_form_fields( $customer_id ) {
if ( isset($_POST['role']) ) {
if( $_POST['role'] == 'reseller' ){
$user = new WP_User($customer_id);
$user->set_role('reseller');
}
}
}
因此,在数据库中正确注册(因为它应该是Wordpress可读,但仅当用户角色&#34;经销商&#34;存在时):
或 CASE 2 :
// To save WooCommerce registration form custom fields.
add_action( 'woocommerce_created_customer', 'wc_save_registration_form_fields' );
function wc_save_registration_form_fields( $customer_id ) {
if ( isset($_POST['role']) ) {
if( $_POST['role'] == 'reseller' ){
$user = new WP_User($customer_id);
$user->add_role('reseller');
}
}
}
因此,在数据库中正确注册(因为它应该是Wordpress可读,但仅当用户角色&#34;经销商&#34;存在时):
代码进入活动子主题(或主题)的function.php文件。经过测试并正常工作。
如果我在注册用户后使用以下代码:
$user_roles = wp_get_current_user()->roles;
print_r($user_roles);
我得到这个显示:
Array ( [0] => reseller )
Array ( [0] => customer [1] => reseller )
您肯定需要使用User Role Editor之类的插件(如果尚未完成)来创建和定义&#34;经销商&#34; 用户角色的功能...... < / p>
答案 1 :(得分:0)
您可以使用此插件自动执行所有操作。 https://wordpress.org/plugins/user-drop-down-roles-in-registration/
安装它,会有一个名为 - &#34;添加用户角色&#34;
的菜单项进入它,移动您希望客户能够选择的所有角色:
按下提交后,您的选择将被保存,您的注册页面将如下所示:
编辑:你在PHP中需要这个吗?这种方式更容易......