워드프레스 댓글 양식에서 이름 필드와 댓글 내용을 입력하지 않고 댓글 등록 버튼을 누르면 오류 페이지가 표시됩니다. 이름 필드와 댓글 내용을 작성하지 않으면 댓글 올리기 버튼이 눌러지지 않도록 하고 싶은 경우 아래의 방법을 사용할 수 있습니다.
워드프레스 댓글에서 이름과 댓글 내용을 입력해야 제출 버튼 활성화되도록 하기
이 블로그의 댓글 입력창에서는 이름과 댓글 내용을 모두 입력해야 댓글 등록 버튼이 활성화되도록 했습니다.

이름이나 댓글 내용 중 하나라도 입력하지 않으면 댓글 올리기 버튼이 비활성화되면서 댓글을 제출할 수 없게 됩니다.
GeneratePress 테마에서는 다음 코드로 댓글 작성자 이름과 댓글 내용을 모두 입력해야 댓글 등록 버튼을 활성화되도록 할 수 있습니다. 다른 워드프레스 테마에서는 테스트하지 않았지만 대부분 잘 작동할 것이라 생각됩니다.
CSS 코드:
/* Style for disabled submit button */
#submit:disabled {
background-color: gray;
color: white;
cursor: not-allowed;
}
상기 CSS 코드를 차일드 테마 내의 스타일시트 파일(style.css)이나 워드프레스 관리자 페이지 » 외모 » 사용자 정의하기 » 추가 CSS에 추가할 수 있습니다.
자바스크립트 코드:
<script>
document.addEventListener('DOMContentLoaded', function () {
const authorInput = document.getElementById('author');
const commentInput = document.getElementById('comment');
const submitButton = document.getElementById('submit');
function updateButtonState() {
if (authorInput.value.trim() !== '' && commentInput.value.trim() !== '') {
submitButton.disabled = false;
} else {
submitButton.disabled = true;
}
}
// Initial check
updateButtonState();
// Event listeners for input fields
authorInput.addEventListener('input', updateButtonState);
commentInput.addEventListener('input', updateButtonState);
});
</script>
상기 자바스크립트 코드를 "워드프레스에서 js 스크립트 파일과 스타일시트를 올바르게 로드하는 방법"을 참고하여 로드할 수 있습니다.
간단히는 그리 권장하지는 않지만 WPCode 플러그인을 설치하고 푸터 영역에 위의 코드를 추가할 수 있습니다.
GeneratePress 테마를 사용하는 경우에는 Elements에서 wp_footer 훅을 지정하여 푸터 영역에 코드를 추가할 수 있습니다.
댓글에 HTML 태그가 입력될 경우 오류 메시지 표시하기
이 블로그의 댓글 시스템에서 댓글을 작성할 때 HTML 태그를 입력하면 경고가 표시되면서 댓글 제출 버튼이 비활성화되도록 설정했습니다.

이름 필드와 댓글 내용을 입력하지 않으면 등록 버튼이 비활성화되고, HTML 태그가 댓글 내용에 포함될 경우 등록 버튼이 비활성화되고 경고 메시지가 표시되도록 하고 싶은 경우 다음 JavaScript 코드를 사용할 수 있습니다. (※ 2023년 12월 27일 업데이트: 처음 제시된 코드가 모바일에서는 작동하지 않아서 모바일에서 작동하도록 변경했습니다.)
<script>
window.addEventListener("DOMContentLoaded", function() {
// Find the textarea, author input, and submit button
const textarea = document.querySelector('textarea[name="comment"][cols="45"][rows="8"]');
const authorInput = document.getElementById('author');
const submitButton = document.getElementById('submit');
// Function to update the state of the submit button
function updateSubmitButtonState() {
const isAuthorNotEmpty = authorInput.value.trim() !== '';
const isTextareaNotEmpty = textarea.value.trim() !== '';
const hasHTMLTags = /<\/?[a-z][\s\S]*?>/i.test(textarea.value);
submitButton.disabled = !(isAuthorNotEmpty && isTextareaNotEmpty) || hasHTMLTags;
}
if (textarea) {
// Existing event listeners for the textarea
textarea.addEventListener("input", handleTextareaInput);
textarea.addEventListener("change", handleTextareaInput); // Added for mobile devices
}
if (authorInput) {
// Event listener for author input field
authorInput.addEventListener('input', updateSubmitButtonState);
authorInput.addEventListener('change', updateSubmitButtonState); // Added for mobile devices
}
// Function to handle input and change events for textarea
function handleTextareaInput() {
const content = this.value;
const hasHTMLTags = /<\/?[a-z][\s\S]*?>/i.test(content);
let warning = document.getElementById("htmlTagWarning");
if (hasHTMLTags) {
if (!warning) {
warning = document.createElement('span');
warning.id = "htmlTagWarning";
warning.className = "comments-warning";
warning.innerHTML = 'Warning! HTML 태그 입력이 허용되지 않습니다. <a href="https://www.thewordcracker.com/lt-gt-converter/" target="_blank">여기</a>에서 부등호 기호를 변환하여 입력해주세요.';
this.after(warning);
}
} else if (warning) {
warning.remove();
}
updateSubmitButtonState();
}
// Initial check to update submit button state
updateSubmitButtonState();
});
</script>
댓글 길이를 제한하여 스팸 댓글 줄이기
댓글 길이가 너무 짧거나 너무 길면 댓글이 등록이 안 되도록 하고 싶은 경우 다음 글에서 소개하는 코드를 사용할 수 있습니다.
그런데 댓글에 HTML 태그 입력을 막아 놓으신 이유가 있나요?
html 태그를 입력할 경우 댓글에 html 부분은 표시가 안 됩니다.
코드를 입력할 경우 부등호 기호를 변환해야 합니다.
https://www.thewordcracker.com/lt-gt-converter/
함수 파일에 특별한 코드를 추가해 놓은 것은 아니고 제 사이트에서 댓글 내용에 <strong>으로만 테스트를 해봤는데 <strong>으로 감싼 부분은 글자가 진하게 표시되던데요?ㅎㅎ
아마 일부 태그만 허용되는 것 같습니다. 관리자가 아닌 사용자로도 테스트해보시기 바랍니다.
일부 html 태그가 작동하지 않도록 한 것은 보안을 위한 것입니다.
추가로 html 태그 입력을 허용하고 싶은 경우 https://wordpress.stackexchange.com/questions/340526/how-to-allow-more-html-tags-in-comment-for-a-certain-comment-type 문서를 참고해보시기 바랍니다.
그런데 WPCode 플러그인 푸터 영역에 자바스크립트 코드를 추가하는 건 왜 권장하지 않으시는 건가요?
간편하게 자바스크립트를 로드할 때에는 WPCode를 사용하면 편리합니다.
사이트 속도에 최소한의 영향을 주도록 하려면 다음 글에서 제시하는 방법으로 js 코드를 로드하는 것이 바람직합니다.
그리고 필요한 곳에만 코드를 로드하도록 조건을 추가하는 것도 고려할 수 있습니다.
https://www.thewordcracker.com/intermediate/how-to-load-js-files-in-wordpress/
댓글에 HTML 태그가 입력될 경우 오류 메시지 표시하는 JavaScript 코드가 WPCode 플러그인 푸터 영역에 추가하면 적용이 되는데 왜 Ad Inserter 플러그인 푸터 영역에 추가하면 적용이 안될까요?
정확한 이유는 모르겠습니다만, 캐시 플러그인과 관련이 있지 않을까 생각되기도 하네요. Ad Inserter에서 작동하지 않으면 WPCode를 사용하시기 바랍니다.
댓글에서 이름과 내용을 입력해야 제출 버튼이 활성화 되도록 설정하면 굳이 이름 필드를 필수로 만들 필요가 없는 걸까요?
그렇게 해도 될 것 같습니다. 상기 코드는 이 블로그에 사용되는 것을 정리하여 올린 것입니다.
CSS 코드랑 자바스크립트 코드 2개 다 추가해야 하는 거죠?
자바스크립트는 둘 중 원하는 것을 선택하세요.
댓글에 이름과 내용을 입력해야 제출 버튼 활성화 되는 코드가 자바스크립트 빼고 CSS 코드만 넣어도 작동을 하네요! 감사합니다^^
네, 살펴보니 제 블로그에서도 댓글 이름을 필수로 설정하는 코드가 제거되었네요.😁😁
워드프레스에 로그인을 했을 때 제출 버튼이 항상 활성화 되어 있었던 거고 로그아웃을 하고 다시 확인해 보니까 비활성화가 되어 있네요^^
이름과 댓글 내용을 입력해야 활성화되도록 코딩되어 있습니다.
아래의 CSS 코드를 빼니까 적용되네요.
/* 댓글 등록 버튼 스타일 변경 */
input#submit.submit {
background-color: #1e73be;
padding: 7px 25px;
border-radius: 30px;
font-weight: bold;
transition: background-color 0.3s ease;
}
input#submit.submit:hover {
background-color: darkgray;
}
input#submit.submit:active {
position: relative;
top: 2px;
}
CSS는 환경에 따라 적절히 변경하여 사용하시면 됩니다.😄😄😄
아 제가 확인을 잘못했습니다. 상기의 CSS 코드를 빼고 아무 CSS 코드를 넣지 않은 후 제출 버튼 비활성화 CSS 코드와 자바스크립트 코드를 넣어도 제출 버튼이 비활성화 되지 않습니다!
이 부분은 js 파일 적용을 잘못했거나, 캐시 플러그인 등과 충돌해서 문제가 발생할 수도 있습니다.
CSS 코드와 자바스크립트 코드를 WPCode 푸터에 추가했는데 제출 버튼이 비활성화 되지 않습니다.