我已经在弹出元素中编写了woocommerce登录和注册表单。我还在弹出窗口中调用了<?php wc_print_notices(); ?>,以便在适用时给出错误消息。我面临的挑战是在提交后显示正确的表单和相关的登录或注册错误。
这是我在弹出窗口中使用的php表单。弹出窗口显示一个表单,具体取决于用户在标题中选择的是sign in还是register。这一切都行得通。
function separate_registration_form() {
if ( is_admin() ) return;
ob_start();
if ( is_user_logged_in() ) {
wc_print_notices();
} else {
?>
<?php wc_print_notices(); ?>
<form id="woo-register-form" method="post">...etc...</form>
<form id="woo-login-form" method="post">...etc...</form>
<?php
}
return ob_get_clean();
}我目前的解决方案是在类.woocommerce-error在DOM中时添加一个JS触发器,以便显示弹出窗口。但在本例中,它显示了两个表单,我正在寻找如何调用与链接错误相关的正确表单。因此,当有人输入了错误的登录密码,在页面加载后,它会显示弹出窗口,例如登录表单。这可以用JS或PHP来完成吗?还是一个组合?
发布于 2019-08-02 17:55:22
在深入研究了表单的功能之后,我提出了以下解决方案。
表单需要有一个action属性。因此,此action属性将在提交表单后出现在地址栏中。然后,可以添加JS来定义action名称是否在地址路径中,以及.woocommerce-error是否在DOM中以触发弹出窗口。
所以就像这样:
function separate_registration_form() {
if ( is_admin() ) return;
ob_start();
if ( is_user_logged_in() ) {
wc_print_notices();
} else {
?>
<?php wc_print_notices(); ?>
<form id="woo-register-form" action="#register" method="post">...etc...</form>
<form id="woo-login-form" action="#login" method="post">...etc...</form>
<?php
}
return ob_get_clean();
}让我们假设login-trigger和register-trigger是用于显示表单的按钮。重要的是在页面加载后添加这些操作。JS将是:
$(window).on('load', function(){
/*check if #register is in url*/
if(location.href.indexOf("/#register") > -1){
/*check if error is in the DOM*/
if( $('.woocommerce-error').length){
/*all good, fire off the popup*/
$('.register-trigger').trigger('click');
}
}
/*same for login*/
if(location.href.indexOf("/#login") > -1){
if( $('.woocommerce-error').length){
$('.login-trigger').trigger('click');
}
}
});https://stackoverflow.com/questions/57318046
复制相似问题