Wordpress 选择注册表格中的角色(Woocommerce)
我正在用Wordpress和WooCommerce建立一个网站。此站点需要有两种类型的客户端:Wordpress 选择注册表格中的角色(Woocommerce),wordpress,woocommerce,registration,Wordpress,Woocommerce,Registration,我正在用Wordpress和WooCommerce建立一个网站。此站点需要有两种类型的客户端: 普通客户(woocommerce的默认客户) B2B客户(此用户具有不同的价格和传统产品) 我需要一个复选框出现在注册表上 当用户标记该复选框时,将分配b2b角色,并显示其他字段以完成注册 编辑 我正在用这个密码玩游戏: /*checkbox*/ add_action('woocommerce_after_checkout_billing_form', 'mostrar_campo_n
/*checkbox*/
add_action('woocommerce_after_checkout_billing_form', 'mostrar_campo_nif_profesionales');
function mostrar_campo_nif_profesionales( $checkout ) {
echo '<div id="mostrar_campo_nif_profesionales"><h3>'.__('¿Eres un profesional?').'</h3>';
woocommerce_form_field( 'check_profesional', array(
'type' => 'checkbox',
'class' => array('checkbox-profesionales form-row-wide'),
'label' => __('Profesional?'),
'required' => false,
), $checkout->get_value( 'profesional' ));
echo '</div>';
}
/*the field must appears when the checkbox are checked*/
if ("DON'T KNOW WHAT CONDITION MUST BE WRITE HERE") {
/*** Añadir campo personalizado a página de checkout ***/
add_action('woocommerce_after_checkout_billing_form', 'campo_nif_profesionales');
function campo_nif_profesionales( $checkout ) {
echo '<div id="campo_nif_profesionales"><h3>'.__('NIF/CIF').'</h3>';
woocommerce_form_field( 'NIF', array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __('NIF/CIF'),
'placeholder' => __('Introduzca su NIF/CIF'),
'required' => true,
), $checkout->get_value( 'NIF' ));
echo '</div>';
}
/*** Validación del campo personalizado ***/
add_action('woocommerce_checkout_process', 'campo_nif_profesionales_process');
function campo_nif_profesionales_process() {
global $woocommerce;
// Comprobar si el campo ha sido completado, en caso contrario agregar un error.
if (!$_POST['NIF'])
$woocommerce->add_error( __('Por favor introduce tu NIF o CIF.') );
}
/*** Incluir campo personalizado a formato de orden ***/
add_action('woocommerce_checkout_update_order_meta', 'campo_nif_profesionales_update_order_meta');
function campo_nif_profesionales_update_order_meta( $order_id ) {
if ($_POST['NIF']) update_post_meta( $order_id, 'NIF/CIF', esc_attr($_POST['NIF']));
}
/*** Incluir campo personalizado a correos electrónicos de órdenes ***/
add_filter('woocommerce_email_order_meta_keys', 'campo_nif_profesionales_order_meta_keys');
function campo_nif_profesionales_order_meta_keys( $keys ) {
$keys[] = 'NIF/CIF';
return $keys;
}
}
/*复选框*/
添加行动(“结帐后的商业结算表”、“mostrar\u campo\u nif\u Professionales”);
功能mostrar_campo_nif_Professionales($checkout){
回音'。'是非专业的?';
woocommerce\u form\u字段('check\u Professional',数组(
'键入'=>'复选框',
'class'=>array('checkbox-professionales表单行宽'),
“标签”=>(专业?),
“必需”=>false,
),$checkout->get_value('professional');
回声';
}
/*选中复选框时,该字段必须出现*/
if(“不知道必须在此处写入什么条件”){
/***Añadir campo做了一个página de checkout***/
添加行动(“结帐后的商业结算表”、“专业活动”);
功能campo_nif_Professionales($checkout){
回显'.''NIF/CIF')';
表单字段('NIF',数组)(
'类型'=>'文本',
'class'=>array('my-field-class表单行宽'),
“标签”=>(NIF/CIF),
“占位符”=>uuuuuuuuuuuuuuuz('Introzca su NIF/CIF'),
“必需”=>true,
),$checkout->get_值('NIF');
回声';
}
/***德尔坎波瓦利达奇奥酒店***/
添加行动(“商业结帐流程”、“专业销售流程”);
功能campo_nif_专业流程(){
全球商业;
//这是一个复杂的过程,相反,这是一个错误。
如果(!$\u POST['NIF'])
$woocommerce->add_error(uuu('Por favor introduct tu NIF o CIF');
}
/***包括对客户进行个性化定制***/
添加动作(“woocommerce检查更新订单元数据”、“campo nif专业销售更新订单元数据”);
函数campo\u nif\u professionales\u update\u order\u meta($order\u id){
如果($发布['NIF'])更新发布元($订单id,'NIF/CIF',esc\U属性($发布['NIF']);
}
/***包括康普·德尔德内斯电力公司***/
添加过滤器(“woocommerce\u email\u order\u meta\u keys”、“campo\u nif\u Professionales\u order\u meta\u keys”);
功能campo\u nif\u Professionales\u order\u meta\u键($键){
$keys[]=“NIF/CIF”;
返回$keys;
}
}
但现在的问题是,当用户选中复选框时,只显示文本字段。第1部分。 一开始有两种选择
woocommerce\u register\u form\u start
hook或woocommerce\u register\u form
完成
在这里,我能想到的唯一方法是在默认情况下包含所有的字段,但只在使用时通过JS/JQ显示它们,单击复选框。
这将修复添加字段的部分
第2部分。
验证提交的表格
使用Hookwoocommerce\u register\u post
,然后获取发送回服务器的注册数据。并从服务器端对其进行验证。说明是否选中该框,并且所有相关字段都具有必要的数据,并对字段进行清理
第三部分。
现在向用户添加附加数据和附加角色
现在使用user\u register
hook并获取新注册用户的ID,然后在其中添加新数据
需要注意的是,由于每个用户注册都会触发此钩子,因此首先添加验证以检查此用户是否为客户,然后通过前端表单检查此用户是否已注册,这通常可以通过检查$\u POST
变量来完成。
使用wp\u update\u user
和add\u role
功能来实现这一点
第3部分的示例代码
function add_user_additional_details_frontend_reg( $user_id )
{
$registered_user = get_user_by('ID',$user_id);
if($registered_user) {
$user_role = $registered_user->roles;
if((in_array('customer', (array) $user_role))){
/* The field below "front_end_cust_form" is just a hidden field I added to check and make sure that this is coming from the Front end Reg form where I added the additional fields */
if($_POST['front_end_cust_form'] == 'front_end_cust_form')
{
$first_name = $_POST['billing_first_name'];
$last_name = $_POST['billing_last_name'];
update_user_meta($user_id, 'billing_first_name', $first_name);
update_user_meta($user_id, 'billing_last_name', $last_name);
$update_data = array(
'ID' => $user_id,
'first_name' => $first_name,
'last_name' => $last_name
);
$user_id = wp_update_user($update_data);
$registered_user->add_role('custom_role');
}
}
}
}
add_action( 'user_register', 'add_user_additional_details_frontend_reg', 10, 1 );
希望这能有所帮助。您能详细介绍第3部分或举例说明吗?感谢you@AlejandroGarrido,已使用代码更新答案。如果你需要进一步的帮助,请告诉我。祝你一切顺利。