bounty将于明天到期。回答此问题可获得+50的声誉奖励。Nik7正在寻找来自声誉良好来源的答案。
我们刚刚将结帐页面上的WooCommerce帐户密码字段从“帐户”组移动并合并到“账单”字段组。这很好用。此外,我们创建了一个新的复选框字段并将其添加到账单部分。没有它,“创建帐户”复选框仍将在默认位置。为此,我们使用jQuery创建了一个新的复选框。
感谢以下文章:
- How to move the create account checkbox on Woocommerce checkout page
- Reordering checkout fields in WooCommerce 3
使用我们当前的代码,移动的密码字段总是可见的。我们希望它与WooCommerce默认工作方式相同。这意味着密码字段应该只在复选框激活时可见。WooCommerce默认有一个很好的隐藏和显示CSS。但是,我不能使用相同的CSS(或者脚本?!)。
我们如何将自定义复选框与帐户密码字段联系起来?
// Move Account password field into billing section
function move_password_field($checkout_fields){
// Move Account Password into Billing
$checkout_fields['billing']['account_password'] = $checkout_fields['account']['account_password'];
// Remove Password from Billing
unset($checkout_fields['account']['account_password']);
return $checkout_fields;
}
add_filter('woocommerce_checkout_fields', 'move_password_field', 999);
// CSS rules
add_action( 'woocommerce_before_checkout_billing_form', 'move_checkout_create_an_account_css' );
function move_checkout_create_an_account_css() {
if( ! is_user_logged_in() ) :
?><style>
.woocommerce-account-fields label.woocommerce-form__label-for-checkbox {display: none !important;}
#account_cb_field {margin-top: 32px;}
#account_cb_field input {margin-right: 6px;}
</style>
<?php
endif;
}
// Add a checkbox to billing section
add_filter( 'woocommerce_checkout_fields', 'move_checkout_create_an_account_checkbox' );
function move_checkout_create_an_account_checkbox( $fields ) {
if( ! is_user_logged_in() ) {
// Make email field on half on left side
$fields['billing']['billing_email']['class'] = array('form-row-wide');
// Custom checkbox on half right side
$fields['billing']['account_cb'] = array(
'type' => 'checkbox',
'label' => __("Create an account?", "woocommerce"),
'class' => array('form-row-wide'),
);
}
return $fields;
}
// remove "(optional)" from the new checkbox
add_filter( 'woocommerce_form_field' , 'remove_checkout_optional_fields_label', 10, 4 );
function remove_checkout_optional_fields_label( $field, $key, $args, $value ) {
// Only on checkout page
if ( is_checkout() && ! is_wc_endpoint_url() && $key === 'account_cb' ) {
$optional = ' <span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>';
$field = str_replace( $optional, '', $field );
}
return $field;
}
// The jQuery code
add_action( 'wp_footer', 'move_checkout_create_an_account_js' );
function move_checkout_create_an_account_js() {
if ( ! is_user_logged_in() && is_checkout() && ! is_wc_endpoint_url() ) :
?><script>
(function($){
$('input[name=account_cb]').on( 'click', function() {
$('input[name=createaccount]').trigger('click');
});
})(jQuery);
</script>
<?php
endif;
}
1条答案
按热度按时间gmxoilav1#
该代码存在一些问题,即
Warning: Undefined array key "account_password" in /var/www/html/wp-content/themes/storefront/functions.php
但这是你最初问题的解决方案
更改功能以添加密码字段
更改remove可选文本函数以捕获新字段
提交验证
并更改为JS以拾取该字段是必需的
其他功能已删除,完整代码: