워드프레스 Forminator 플러그인: 전화번호 필드를 3개로 분리하기

Last Updated: 2023년 06월 15일 | | 댓글 남기기

Forminator는 사용이 쉬운 워드프레스 문의 폼 플러그인 중 하나로 현재 40만 개가 넘는 사이트에 설치되어 사용되고 있습니다. 이 플러그인을 사용하여 문의 양식을 만들 때 전화번호 필드를 3개로 분리하여 전화번호 데이터를 받아서 전달하는 방법에 대하여 살펴보겠습니다.

다음은 Forminator 개발자가 공개한 Forminator Pro 소개 영상입니다. Forminator 프로 버전을 사용하여 어떤 종류의 컨택트 폼을 만들 수 있는지 대략적으로 파악할 수 있을 것입니다.

워드프레스 Forminator 플러그인: 전화번호 필드를 3개로 분리하기

유료 워드프레스 컨택트 폼에서 전화번호 필드를 3개로 분리하는 방법에 대하여 "워드프레스 Quform 문의폼: 전화번호 필드를 3개로 분리하기"를 참고할 수 있습니다.

Quform에서는 자체 필드를 사용하여 쉽게 분리가 가능하지만, Forminator는 HTML 코드로 전화번호 필드를 3개로 분리하고, HTML 필드를 통해 받은 데이터를 실제 Forminator의 전화번호 필드로 전달하는 방식으로 진행할 수 있습니다.

워드프레스 Forminator 플러그인: 전화번호 필드를 3개로 분리하기 2

Forminator의 필드를 사용할 경우 위와 그림과 같이 하나의 필드로 입력을 받을 수 있기 때문에, HTML 코드로 3개의 필드를 표시하여 데이터를 받아서 값을 실제 전화번호 필드로 넘겨줄 수 있습니다.

워드프레스 Forminator 플러그인

HTML 필드로 만든 입력 폼에 방문자가 정보를 입력해도 값이 직접 Forminator를 통해 이메일로 전달되지 않고 데이터베이스(DB)에도 저장되지 않기 때문에 이 필드에서 받은 값을 조합하여 Forminator 필드로 넘겨주면 전화번호 정보가 올바르게 전송됩니다.

워드프레스 Forminator 플러그인: 전화번호 필드를 3개로 분리하기

이 경우 다음과 같은 JavaScript 코드를 사용하여 HTML 필드로부터 받은 전화번호 데이터를 Forminator의 해당 필드로 전달할 수 있습니다.

<script>
function setupPhoneFields() {
	
	  	  var element = document.getElementById('phone-1');
    if (element) {
        var parentElement = element.parentNode;
        parentElement.style.display = 'none';
    }
	
    var element = document.querySelector('.phone-number3 .forminator-label');
    if(element && !document.querySelector('#phone-number3 input')) {
        element.innerHTML += ' <span class="forminator-required">*</span>';

        var divContent = `<input type="text" id="phone1" value="010" maxlength="3" pattern="^01[0-9]{1}" required="required"/>
        <input type="text" id="phone2" maxlength="4" pattern="[0-9]{4}" required="required"/>
        <input type="text" id="phone3" maxlength="4" pattern="[0-9]{4}" required="required"/>`;

        document.getElementById("phone-number3").innerHTML = divContent;

        var phone1 = document.getElementById('phone1');
        var phone2 = document.getElementById('phone2');
        var phone3 = document.getElementById('phone3');
        var targetField = document.querySelector('input[name="phone-1"]');

        phone1.value = sessionStorage.getItem('phone1') || '010';
        phone2.value = sessionStorage.getItem('phone2') || '';
        phone3.value = sessionStorage.getItem('phone3') || '';

        function updatePhone2Field() {
            targetField.value = phone1.value + '-' + phone2.value + '-' + phone3.value;
        }

        function validateInput(e) {
            var newValue = e.target.value;
            if (!/^\d*$/.test(newValue)) {
                e.target.value = newValue.slice(0, -1);
                alert("숫자만 입력할 수 있습니다!");
            }
            sessionStorage.setItem(e.target.id, e.target.value);
        }

        phone1.addEventListener('input', updatePhone2Field);
        phone1.addEventListener('input', validateInput);

        phone2.addEventListener('input', updatePhone2Field);
        phone2.addEventListener('input', validateInput);

        phone3.addEventListener('input', updatePhone2Field);
        phone3.addEventListener('input', validateInput);

        function validatePhone1Field(e) {
            var newValue = e.target.value;
            if (!/^[\d-+ ]*$/.test(newValue)) { 
                e.target.value = newValue.slice(0, -1);
                alert("숫자, 하이픈, +, 스페이스만 허용됩니다!"); 
            }
        }

        targetField.addEventListener('input', validatePhone1Field);

        updatePhone2Field(); // call this once after all setup to propagate the initial values
    }
}

window.onload = function() {
    setInterval(setupPhoneFields, 200);
};
</script>

상기 스크립트에서 phone-1은 실제 필드 ID에 따라 적절히 변경하시기 바랍니다. 또한, HTML 필드에는 phone-number3 클래스를 추가하고 HTML 필드의 내용으로 다음 HTML 코드를 입력합니다.

<div="phone-number3"></div>

Forminator에서는 필드에 데이터를 입력하고 다른 필드로 이동하면 HTML 필드가 사라지는 현상이 발생하여, 이에 대처하도록 코드가 작성되어 있습니다.

스타일은 CSS 코드를 통해 제어할 수 있습니다. 예시:

.forminator-label {padding:5px;}

.phone-numbers3 input, .input-field {
    border-bottom: 1px solid #777771;
    box-sizing : border-box;
    color : black;
    background-color: white;
}
#phone1, #phone2, #phone3 {
    width: 30%;
    border:none;
    background-color:white;
    border-bottom: 1px solid #777771;
}
.forminator-input { 
    background-color:white;
    border-bottom: 1px solid #777771;
}
.forminator-textarea {
    background-color:white; 
    border: 1px solid #777771;
}

#phone-number3 {
    margin-top: -11px;
}

참고


댓글 남기기

Leave a Comment