0

我想知道如何在使用 Ultimate Member 插件在 Wordpress 中提交个人资料表单之前删除输入值。我已经坚持了整整一周。

问题是我在配置文件表单中有条件字段,如果用户没有选择,他们仍然会在提交表单时保存他们的值。该插件不会有条件地从隐藏字段中删除值,如果您想使用 REST API 将这些字段发送到其他地方,这是一个问题。

我不能用 PHP 做到这一点,所以我在主体函数中添加了一个脚本来尝试清除这些值。这在用户刷新表单时起作用,但在用户使用钩子 um_after_user_updated提交表单时不起作用

function remove_before_send () {
        ?>
            <script>
                var elements = document.querySelectorAll('.um-is-conditional');
                for (var i = 0; i < elements.length; i++) {
                elements[i].childNodes[1].childNodes[0].value = "";
                }
            </script>
        <?php
}
add_action('um_profile_content_main', 'remove_before_send');

编辑:感谢@JB_DELR 的评论。你真的给了我所有的线索。这是我的最终代码(我并不自豪,因为我想使用 php,但这是我能做的最好的)

function remove_before_send () {
        ?>
            <script>
                var boton = document.querySelector("div.um-left.um-half > input");
                boton.addEventListener("click", function(){
                var elements = document.querySelectorAll('.um-is-conditional');
                for (var i = 0; i < elements.length; i++) {
                if (elements[i].style.display == "none") {
                elements[i].childNodes[1].childNodes[0].value = "";
                }
                }
                });
            </script>
        <?php
}
add_filter( 'um_profile_content_main', 'remove_before_send');
4

1 回答 1

0

您的 js 脚本需要处理表单提交事件,防止默认提交,删除不必要的字段并提交表单本身。

像这样的东西:

<script>
var form = document.querySelector(<select the form>);
form.onsubmit = function(e) {
   e.preventDefault(); // don't submit the form right now;
   var elements = document.querySelectorAll('.um-is-conditional');
   for (var i = 0; i < elements.length; i++) {
     elements[i].childNodes[1].childNodes[0].value = "";
   }
   // to remove element, this remove the input field, so field is no more in the request
   // elements[i].childNodes[1].removeChild(elements[i].childNodes[1].childNodes[0]);
}
form.submit();
</script>
于 2020-12-16T18:54:41.300 回答