신규 기능 1
- 댓글 안티스팸 시스템 구축 — 자체 경량 MU-Plugin(gameboy-antispam.php) 개발. Honeypot + 시간 트랩(3초) + IP 속도 제한(60초/3건) + 패턴 차단(BTC 피싱/Tor IP/도박) 4중 방어. 기존 스팸 18건 정리
GAMEBOY.KR의 모든 변경사항을 투명하게 기록합니다
gbb_get_gold(), gbb_add_gold())을 호출하여 골드 기능이 작동하지 않던 버그 수정. ① 셀프핀 골드 0G 표시: 게시글 상단 고정 기능에서 내 골드가 항상 0G로 표시 → gbb_get_points()로 수정, 실제 잔액(238,837G) 정상 표시. ② 퀴즈 골드 미지급: 퀴즈 참여/정답 시 골드가 지급되지 않음 → gbb_add_point()로 수정. ③ 도전과제 골드 미지급: 도전과제 완료 시 골드가 지급되지 않음 → gbb_add_point()로 수정. 대상 파일: post-view.php, quiz-system.php, content-feed.php
/wp-admin/admin.php?page=gbmc-submissions&form_id=N)에서 각 답변 텍스트를 손쉽게 복사할 수 있는 기능 추가. ① 모든 답변 값(마크ID, 채널명, 이메일, 디스코드 등)을 readonly 필드로 렌더링하여 더블클릭 시 전체 텍스트 자동 선택. ② 각 답변 옆 📋 복사 버튼 클릭 시 navigator.clipboard.writeText() API로 클립보드에 즉시 복사, 구형 브라우저용 document.execCommand('copy') fallback 포함. ③ 복사 성공 시 버튼이 ✅로 1.5초간 변환되는 시각적 피드백. ④ 기존 다크 테마(#14141f 배경, #333 테두리, #8b5cf6 보라색 포커스)와 완전 통일. ⑤ 모바일 반응형 대응(@media max-width: 600px flex-wrap). 플러그인 v1.3.0→v1.3.1 (CSS/JS 캐시 버스팅)
/mc-server/?my=ID(내 신청 내역) 페이지에서 관리자가 안내 토글을 ON하고 메시지/URL을 설정해도 안내 콘텐츠가 전혀 표시되지 않던 문제 수정. 근본 원인: v1.3.0 리팩토링에서 안내 표시를 ?my=ID → ?form=ID로 이전하면서 ?my=ID 경로의 렌더링 코드가 누락됨. 승인 상태 카드 하단에 📢 안내 카드(메시지 본문 + 🔗 안내 페이지 바로가기 버튼) 추가. 승인 + 토글 ON + 메시지/URL 존재 시에만 조건부 표시
/mc-server/?my=ID 페이지에서 승인 완료 시 표시되는 메시지를 "🎉 서버 화이트리스트에 등록되었습니다. 게임에서 접속해보세요!" → "🎉 서버 화이트리스트에 등록되었습니다."로 변경. 불필요한 안내 문구 제거하여 간결한 메시지 제공
{username}, {minecraft_id}, {url} 변수 지원, HTML 형식 이메일에 보라색 CTA 버튼 포함
/mc-server/?form=ID)에 접속하면 📢 안내 뱃지 + 메시지 + 보라색 CTA 버튼이 표시됨. OFF 시 즉시 숨겨짐. 마감된 신청서에서도 동작
/mc-server/?my=ID 페이지 하단의 "🚫 신청 취소"와 "← 목록으로 돌아가기" 두 버튼의 크기가 불균일하고 텍스트 정렬이 일관되지 않던 문제 수정. 근본 원인: (신청 취소)에 인라인 스타일(background:#ef4444;color:#fff;border:none)이 적용되고, (목록으로 돌아가기)는 .gbmcm-btn CSS 클래스만 사용하여 box model과 높이가 달랐음. 수정: ① .gbmcm-btn 기본 클래스를 display: inline-block → inline-flex + align-items: center + justify-content: center + text-align: center + box-sizing: border-box로 업그레이드하여 모든 버튼 텍스트 중앙 정렬 통일. ② .gbmcm-btn-danger 클래스 신규 추가(빨간색 위험 액션 버튼 전용, #ef4444, hover #dc2626). ③ .gbmcm-bottom-actions 클래스 신규 추가 — 하단 버튼 영역 flex 레이아웃 + 자식 .gbmcm-btn에 min-width: 160px + min-height: 44px 적용. ④ page-mc-server.php의 인라인 스타일 제거 → CSS 클래스 기반으로 전환. 데스크톱(1280px)/모바일(375px) 양쪽 검증 완료. 플러그인 v1.1.2→v1.1.3 (CSS 캐시 버스팅)
wp-admin > MC 관리 > 신청서 작성)의 안내 문구 필드를 단순 에서 WordPress WYSIWYG 에디터(TinyMCE)로 전면 교체. 이미지·영상·링크·서식(볼드/이탤릭/리스트/인용) 삽입 가능. 「미디어 추가」 버튼으로 WP 미디어 라이브러리 연동. 프론트엔드에서 HTML 콘텐츠를 wp_kses_post()로 안전하게 렌더링. .gbmcm-form-desc 내 링크(보라색)·이미지(반응형)·iframe·리스트·인용구 전용 다크 테마 CSS 추가. 플러그인 v1.0.12→v1.1.0
\"익숙한 그 맛...\" 처럼 역슬래시+쌍따옴표가 그대로 표시되던 문제 수정. 근본 원인: AJAX 저장 핸들러에서 $_POST 데이터에 stripslashes() 미적용 → WordPress magic quotes가 삽입한 역슬래시가 DB에 저장 → esc_html() 출력 시 그대로 노출. wp_kses_post(stripslashes()) 체인으로 수정, 기존 DB 데이터도 HTML로 정제하여 마이그레이션 완료
gbmcm_autolink_urls() 헬퍼 함수로 URL 자동 감지 → 클릭 가능 링크 변환. URL 전체 표시(생략 없음), 새 탭 열기 + 보안 속성 자동 적용, 모바일 word-break: break-all
wp_editor의 default_editor 옵션이 사용자 쿠키(wp-settings-{user_id}[editor])에 의해 무시됨 → wp_default_editor 필터로 쿠키 우회 강제 적용. ② 비주얼 탭이 CSS상 활성화(tmce-active)되어도 TinyMCE 인스턴스(iframe)가 실제로 초기화되지 않는 타이밍 이슈 → JS에서 switchEditors.go(editorId, 'tmce') 300ms 지연 호출로 강제 초기화. 페이지 로드 시 WYSIWYG 툴바 + 렌더링된 콘텐츠가 자동 표시
/mc-server/?form= 프론트엔드 폼이 좌우에 불필요한 간격이 있어 최대 너비로 확장되지 않던 문제 수정. 근본 원인: 플러그인 .gbmcm-front-container의 자체 패딩(padding: 0 16px, 모바일 0 10px)이 테마 #content.container-wrapper의 패딩(20px)과 중첩되어 좌우 총 36px 간격 발생. .gbmcm-front-container 패딩을 0으로 제거하여 부모 컨테이너 내 가용 너비 전체 사용. 플러그인 v1.1.0→v1.1.1 (캐시 버스팅)
/mc-server/?form= 프론트엔드 신청서에서 관리자 에디터(TinyMCE)로 입력한 유튜브 URL이 일반 텍스트로만 표시되고 임베드 플레이어가 나오지 않던 문제 수정. 수정: 커뮤니티 보드 gbb_auto_embed() 로직을 MC 관리 플러그인용 gbmcm_auto_embed() 경량 엔진으로 구현. YouTube 태그 링크 → iframe 임베드, 평문 YouTube URL → iframe 임베드, 일반 URL → 클릭 가능 링크(target="_blank"), 외부 링크 target="_blank" 자동 부여, 중복 임베드 방지. .gbmcm-embed-youtube 반응형 16:9 CSS 추가. 유튜브 플레이리스트 URL은 개별 영상이 아니므로 클릭 링크로 유지. wp_kses_post() → gbmcm_auto_embed(wp_kses_post()) 체인 적용. 플러그인 v1.1.1→v1.1.2 (캐시 버스팅)
/mc-server/?form=3)와 내 신청 확인 페이지(/mc-server/?my=3)에서 클릭 가능한 링크( 태그)로 자동 변환. 기존 gbmcm_autolink_urls() 헬퍼 함수를 재사용하여 esc_html() 처리 후 URL 패턴 감지 → 보라색(#a78bfa) 밑줄 링크 생성. target="_blank" 새 탭 열기 + rel="noopener noreferrer" 보안 속성 자동 적용. 적용 범위: ① 신청 폼 필드 설명 ② 내 신청 확인 필드 설명 ③ 내 신청 확인 입력 힌트
submission_count(pending+approved만 카운트) 조건으로 버튼을 표시하여, 전부 취소되거나 아직 신청이 없는 경우 상세보기/CSV 버튼이 숨겨짐. 관리자가 취소된 신청 내역을 확인할 수 없는 심각한 접근성 문제. 수정: 조건문 제거 → 📊📥 버튼을 신청 건수와 관계없이 항상 표시
email 타입 필드가 있으면 회원의 가입 이메일(wp_get_current_user()->user_email)을 자동 입력. 하단에 "회원 정보에서 자동 입력됨" 안내 라벨 표시. 마인크래프트 ID·치지직 자동 입력과 동일한 UX 패턴 적용
streamers 테이블에 자동 등록(중복 시 팔로워수만 UPDATE). 채널명 자동 보정 기능 포함
user_meta 캐싱을 통해 페이지 로드 시 API 호출 없이 표시
/mc-server/?form=ID에서 치지직 채널 URL 문항에 자동 입력된 값이 있으면 "👥 팔로워 N명" 배지 표시
/mc-server/?my=ID 페이지 상단에 폼 description(안내 문구) 출력 추가. YouTube 임베드·링크 auto_embed 포함
→ (22px, bold)로 변경하여 본문과 시각적으로 구분
다양한 플랫폼에서 GAMEBOY.KR과 소통하세요