Php 如果重新加载注册页面,请记住HTML下拉列表值

Php 如果重新加载注册页面,请记住HTML下拉列表值,php,html,wordpress,woocommerce,dropdown,Php,Html,Wordpress,Woocommerce,Dropdown,我有一个WordPress页面,其中默认登录/注册页面被禁用,我允许用户通过WooCommerce登录/注册页面注册,通过我的主题的functions.php添加了一系列自定义字段 其中一个字段是一个下拉字段,允许用户选择他们的国家 如果用户在注册表中遗漏了某些内容,并且页面重新加载时会显示一条错误消息,告知用户遗漏了什么内容,则文本字段将预先填充他们以前的文本。但是,下拉菜单将恢复为中性选项,而不是记住以前的值 我的代码如下所示: <?php add_filter( 'woocommer

我有一个WordPress页面,其中默认登录/注册页面被禁用,我允许用户通过WooCommerce登录/注册页面注册,通过我的主题的functions.php添加了一系列自定义字段

其中一个字段是一个下拉字段,允许用户选择他们的国家

如果用户在注册表中遗漏了某些内容,并且页面重新加载时会显示一条错误消息,告知用户遗漏了什么内容,则文本字段将预先填充他们以前的文本。但是,下拉菜单将恢复为中性选项,而不是记住以前的值

我的代码如下所示:

<?php add_filter( 'woocommerce_register_form', 'adding_custom_registration_fields' );
function adding_custom_registration_fields($fields) {
$countries_obj = new WC_Countries();
$countries = $countries_obj->__get('countries'); ?>

<div class="form-row form-row-wide">
    <label for="reg_billing_country"><?php _e( 'Country', 'woocommerce' ); ?> <span class="required">*</span></label>
    <select class="country_select sk-required" data-sk-tooltip="Required" name="billing_country" id="reg_billing_country">
        <option value=""> <?php _e('Select country','my-theme'); ?></option>
        <?php foreach ($countries as $key => $value): ?>
            <option value="<?php echo $key?>"><?php echo $value?></option>
        <?php endforeach; ?>
    </select>
</div>

但是,只有使用F5手动重新加载页面时,才会保留该值。如果通过单击表单不完整的submit按钮重新加载页面,则下拉菜单将恢复其默认值,忽略脚本

我使其工作-结果是脚本未正确放置,因此未执行。感谢@mplungjan指出这一点

我在my functions.php中的标记前面添加了上面提到的脚本,代码如下:


使用wp_footer操作钩子,脚本被正确放置和执行。

PHP会话或会话存储/localStorage@mplungjan我添加了一个脚本来处理它:var selectedItem=sessionStorage.getItemcountry\u select\u session;$'reg\u billing\u country'.valselectedItem;$'reg_billing_country'.changefunction{var dropVal=$this.val;sessionStorage.setItemcountry_select_session,dropVal;};但是,只有使用F5手动重新加载页面时,才会保留该值。如果在表单不完整的情况下单击“提交”按钮重新加载页面,则下拉菜单将恢复其默认值,忽略脚本。然后您的脚本将不包括在内。在@mplungjan开始工作之前,尝试将其添加到页面末尾,谢谢!我发布了工作函数作为答案。你从提交中获取你的post值,然后将其插入下拉列表中,怎么样?
var selectedItem = sessionStorage.getItem("country_select_session"); 
$('#reg_billing_country').val(selectedItem); 
$('#reg_billing_country').change(function() { 
  var dropVal = $(this).val(); 
  sessionStorage.setItem("country_select_session", dropVal); 
}); 
add_action( 'wp_footer', function () { ?>
    <script language="javascript" type="text/javascript">
        var selectedItem = sessionStorage.getItem("country_select_session");  
        $('#reg_billing_country').val(selectedItem);

        $('#reg_billing_country').change(function() { 
            var dropVal = $(this).val();
            sessionStorage.setItem("country_select_session", dropVal);
        });
    </script>
<?php } );