我在使用woocommerce注册表时遇到了一些问题。我想添加一个同意实际有用的术语复选框。
我添加了显示form-login.php复选框的代码(来自templates / my account文件夹)。
我尝试从includes文件夹修改wc-user-functions.php和class-wc-form-handler.php中的代码,现在它无法识别用户何时选中该框。无论我是否勾选方框,它都会给我每次请接受条款错误。
有谁知道我的错误在哪里?
form-login.php添加了代码
<p class="form-row form-row-wide">
<label for="accept_terms" class="inline"><span class="required"></span></label>
<input name="accept_terms" type="checkbox" id="accept_terms" value="empty";/>
<?php _e( 'Am citit si sunt de acord cu' ); ?> <a href="<?php echo "http://................." ?>"><?php _e( 'termenii si conditiile', 'woocommerce' ); ?></a>
</p>
wc-user-functions.php添加了代码
// Check the accept terms
if ( empty( $accept_terms ) ) {
return new WP_Error( 'registration-error-accept-terms', __( 'Please accept terms', 'woocommerce' ) );
}
wc-class-form-handler.php修改后的代码
public static function process_registration() {
if ( ! empty( $_POST['register'] ) && isset( $_POST['_wpnonce'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'woocommerce-register' ) ) {
$username = 'no' === get_option( 'woocommerce_registration_generate_username' ) ? $_POST['username'] : '';
$password = 'no' === get_option( 'woocommerce_registration_generate_password' ) ? $_POST['password'] : '';
$email = $_POST['email'];
$accept_terms = $_POST['accept_terms'];
try {
$validation_error = new WP_Error();
$validation_error = apply_filters( 'woocommerce_process_registration_errors', $validation_error, $username, $password, $email, $accept_terms);
if ( $validation_error->get_error_code() ) {
throw new Exception( $validation_error->get_error_message() );
}
// Anti-spam trap
if ( ! empty( $_POST['email_2'] ) ) {
throw new Exception( __( 'Anti-spam field was filled in.', 'woocommerce' ) );
}
$new_customer = wc_create_new_customer( sanitize_email( $email ), wc_clean( $username ), $password);
if ( is_wp_error( $new_customer ) ) {
throw new Exception( $new_customer->get_error_message() );
}
if ( apply_filters( 'woocommerce_registration_auth_new_customer', true, $new_customer ) ) {
wc_set_customer_auth_cookie( $new_customer );
}
wp_safe_redirect( apply_filters( 'woocommerce_registration_redirect', wp_get_referer() ? wp_get_referer() : wc_get_page_permalink( 'myaccount' ) ) );
exit;
} catch ( Exception $e ) {
wc_add_notice( '<strong>' . __( 'Error', 'woocommerce' ) . ':</strong> ' . $e->getMessage(), 'error' );
}
}
}
非常感谢任何帮助!
答案 0 :(得分:1)
首先,您不应编辑核心WooCommerce文件。您将自己锁定到代码中,永远无法更新,这很糟糕。并且真的没有必要和WooCommerce充斥着钩子和过滤器,允许您从自己的主题/插件进行修改。以下内容应放在您的主题functions.php
中,或者最好放入自己的自定义插件中。
第一部分将添加术语复选框。如果您希望显示与结帐页面完全相同的字词字段,则可以使用相同的模板。
function so_33122634_add_field_to_registration(){
wc_get_template( 'checkout/terms.php' );
}
add_action( 'woocommerce_register_form', 'so_33122634_add_field_to_registration' );
然后在woocommerce_process_registration_errors
我们可以检查$_POST
并抛出异常(如果不存在)。 WooCommerce将收集所有异常并显示相应的错误消息。
function so_33122634_validation_registration( $errors, $username, $password, $email ){
if ( empty( $_POST['terms'] ) ) {
throw new Exception( __( 'You must accept the terms and conditions in order to register.', 'text-domain' ) );
}
return $errors;
}
add_action( 'woocommerce_process_registration_errors', 'so_33122634_validation_registration', 10, 4 );