Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/he-works/wp-he-sorts/archive/refs/heads/main.zipUpdates itself. It ships its own updater, so new versions appear under Dashboard → Updates.
WordPress 관리자 메뉴를 자유롭게 정렬·편집할 수 있는 플러그인
소개
HE SORTS는 WordPress 관리자 대시보드의 왼쪽 메뉴를 드래그 앤 드롭으로 자유롭게 재배치할 수 있는 플러그인입니다.
기본 메뉴 순서가 마음에 들지 않거나, 자주 쓰는 메뉴를 상단에 올리고 싶을 때 간편하게 사용할 수 있습니다.
주요 기능
- 드래그 앤 드롭 정렬 — 1뎁스(상단 메뉴)부터 3뎁스(중첩 하위 메뉴)까지 자유롭게 순서 변경
- 뎁스 이동 — 항목을 하위로 내리거나(들여쓰기), 상위로 올릴 수(내보내기) 있음
- 메뉴 이름 변경 — 각 항목의 표시 이름을 원하는 대로 수정
- 항목 숨기기 — 필요 없는 메뉴를 삭제하지 않고 숨김 처리
- 커스텀 메뉴 추가 — URL, 아이콘, 권한, 링크 대상을 지정하여 새 메뉴 항목 추가
- GitHub 자동 업데이트 — WordPress 플러그인 업데이트 창에서 바로 업데이트 가능
스크린샷
┌──────────────────────────────────────────────────────────┐
│ HE SORTS v1.0.0 [+ 항목 추가] [초기화] [저장] │
├─────────────────────────────┬────────────────────────────┤
│ 메뉴 구조 │ 항목 속성 │
│ │ │
│ ⠿ 🏠 대시보드 ›👁 │ 표시 이름 │
│ ⠿ 홈 ›‹👁 │ [대시보드 ] │
│ ⠿ 업데이트 ›‹👁 │ │
│ ⠿ ✏️ 글 ›👁 │ ☐ 숨기기 │
│ ⠿ 모든 글 ›‹👁 │ │
│ ⠿ 카테고리 ›‹👁 │ [적용] [삭제] │
│ ⠿ 태그 ›‹👁 │ │
│ ... │ │
└─────────────────────────────┴────────────────────────────┘
설치 방법
직접 업로드
- 이 저장소를 ZIP으로 다운로드합니다.
- WordPress 관리자 → 플러그인 → 새로 추가 → 플러그인 업로드에서 ZIP 파일을 선택합니다.
- 설치 후 활성화합니다.
FTP / 파일매니저
plugin-HE-SORTS폴더를/wp-content/plugins/경로에 업로드합니다.- WordPress 관리자 → 플러그인에서 HE SORTS를 활성화합니다.
사용 방법
- 플러그인 활성화 후 관리자 메뉴 맨 하단의 HE SORTS 항목을 클릭합니다.
- 또는 플러그인 목록에서 HE SORTS 옆의 설정 링크를 클릭합니다.
순서 변경
- 항목 왼쪽의
⠿핸들을 드래그하여 원하는 위치로 이동합니다.
뎁스 조정
| 버튼 | 기능 |
|---|---|
→ (들여쓰기) |
앞 항목의 하위 메뉴로 이동 (최대 3뎁스) |
← (내보내기) |
한 단계 상위 레벨로 이동 |
이름 변경
- 변경할 항목을 클릭합니다.
- 우측 속성 패널에서 표시 이름을 수정합니다.
- 적용 버튼을 누른 후 저장합니다.
항목 숨기기
- 항목 우측의 👁 버튼을 클릭하면 메뉴에서 숨겨집니다.
- 다시 클릭하면 표시됩니다.
커스텀 메뉴 추가
- 상단 항목 추가 버튼을 클릭합니다.
- 이름, URL, 아이콘, 권한, 링크 대상을 입력합니다.
- 추가 버튼을 누르면 트리에 추가됩니다.
- 저장합니다.
초기화
- 초기화 버튼을 누르면 모든 설정이 삭제되고 WordPress 기본 메뉴 순서로 복원됩니다.
요구 사항
| 항목 | 최소 버전 |
|---|---|
| WordPress | 5.0 이상 |
| PHP | 7.4 이상 |
| 브라우저 | Chrome, Firefox, Safari, Edge 최신 버전 |
업데이트
플러그인은 GitHub 릴리즈를 통해 자동 업데이트를 지원합니다.
새 버전이 출시되면 WordPress 관리자 → 플러그인 페이지 또는 대시보드 → 업데이트 화면에서 바로 업데이트할 수 있습니다.
변경 이력
v1.0.16 (2026-07-03)
- 버그 수정(치명적): 자동 업데이트(GitHub 릴리스 → "지금 업데이트") 진행 시 "Cannot redeclare he_sorts_init()" 치명적 오류로 플러그인이 자동 비활성화되던 문제 수정. GitHub 압축 해제 폴더명(예:
wp-he-sorts-main)과 실제 설치 폴더명(예:plugin-HE-SORTS)이 달라, 워드프레스 코어가 새 파일을 기존 폴더로 옮긴 뒤에도 옛 압축 해제 폴더명을 기준으로 재활성화를 시도하면서 같은 파일이 두 경로에서 동시에 include 되던 것이 원인.after_install()에서$result['destination_name']도 함께 갱신하도록 수정, 파일 이동 실패 시에도 안전하게 오류를 반환하도록 개선
v1.0.15 (2026-07-03)
- 버그 수정(핵심): 에디터 페이지 CSS 가
#wpwrap(워드프레스 좌측 관리자 메뉴 + 본문을 함께 감싸는 컨테이너)을display:flex; flex-direction:column으로 바꾸던 문제 수정. 이로 인해 좌측 관리자 메뉴가 워드프레스 자체 위치 계산 스크립트와 충돌해 화면 맨 아래로 밀려나고, 편집 화면은 대부분 빈 여백으로 보이는 문제가 발생했음.#wpwrap/#wpcontent/#wpbody는 더 이상 건드리지 않고, HE SORTS 자신의 래퍼(.he-sorts-wrap)에만calc(100vh - 관리자바 높이)로 높이를 직접 계산해 적용하도록 변경 - 버그 수정: 에디터 화면에서 사용하던 SortableJS 를 외부 CDN(jsdelivr) 대신 플러그인 내장 파일(
assets/js/vendor/sortable.min.js)로 변경 — 외부 스크립트 차단 환경에서도 안전하게 동작하도록 방어 - 안정성: SortableJS 로드에 실패해도 나머지 버튼·입력 등 에디터 기능은 정상 동작하도록 초기화 로직 분리 (
initSortable()실패를try/catch로 격리)
v1.0.14 (2026-04-23)
- 버그 수정: 1뎁스 항목(하위 메뉴 포함)을 2뎁스로 이동 후 다시 1뎁스로 꺼낼 때 하위 항목이 함께 따라오지 않고 기존 부모 아래에 남아있던 문제 수정 —
recalculateParents()를 "유효한parentId유지 + 이동한 항목만 DOM 재탐색" 하이브리드 방식으로 수정 - 버그 수정: 초기화(reset) 후 에디터 메뉴 텍스트 옆에
</span>문자가 출력되던 문제 수정 —strip_menu_badge()를 중첩<span>처리가 가능한strip_tags()방식으로 변경
v1.0.13 (2026-04-23)
- 버그 수정: 부모 항목 삭제 시 자식 항목이 고아로 남아 depth 가 강제 감소되던 문제 수정 — 삭제 시 하위 항목 전체(block)를 함께 제거하고 하위 항목 수를 confirm 메시지에 표시
- UX 개선: 에디터 높이를
calc(100vh - 73px)고정값 대신 flex-chain(#wpwrap → .wrap → .he-sorts-wrap → .he-sorts-body) 으로 계산 — WP 버전·테마별 관리자바 높이 차이 대응 - UX 개선: WP 관리자바 실제 높이를 JS 로 읽어
--wp-admin-bar-hCSS 변수로 주입 — 헤더 sticky top 이 정확하게 적용됨
v1.0.12 (2026-04-23)
- 버그 수정:
recalculateParents()— 기존parentId가 유효해 보여도 DOM 순서가 바뀐 경우 잘못된 부모를 유지하던 문제 수정 (항상 DOM 순서 기준으로 직전 depth-1 항목을 새로 탐색) - 버그 수정: 구분선(separator) 클릭 시 빈 속성 패널이 열리던 문제 수정 (구분선은
selectItem()호출 차단) - 버그 수정: 2뎁스 커스텀 메뉴 추가 시 상위 항목이 선택되지 않은 상태에서 추가하면
parentId/depth불일치 발생하던 문제 수정 (선택 없으면 자동으로 1뎁스로 전환 + 안내 메시지) - 버그 수정: PHP
sanitize_config()에서wp_slug/parent_id값이null인 경우isset(null) === true로 인해sanitize_text_field(null)이 빈 문자열""을 반환하던 문제 수정 (명시적 null 체크로 변경)
v1.0.11 (2026-04-23)
- 버그 수정: 드래그로 항목을 이동할 때 하위 메뉴가 따라오지 않던 문제 수정 (depth 변경 없는 이동 시에도
relocateDescendants항상 호출) - 버그 수정: 1뎁스 항목을 2뎁스로 이동 시 하위 메뉴가 전부 열려 보이고 토글 화살표가 작동하지 않던 문제 수정 (depth≠1 항목의 잔존 토글 버튼 제거,
collapsedState정리 추가) - 버그 수정:
duplicate_page_settings등 원래 1뎁스였던 메뉴를 2뎁스로 이동 시 권한 오류 수정 ($_parent_pages업데이트 + 훅 위임 패치를 depth 2·3 전체로 확장) - 버그 수정:
googlesitekit-settings등 3뎁스 메뉴 빈 화면 문제 추가 개선 (patch_registered_pages로 통합,$_parent_pages올바르게 업데이트)
v1.0.10 (2026-04-23)
- 버그 수정: 3뎁스 메뉴 접근 시 권한 오류 수정 —
$_registered_pages훅 이름 불일치 패치 (patch_depth3_registered_pages()) - 버그 수정: 항목을 다른 메뉴 하위로 이동 시 하위 메뉴가 자동으로 펼쳐지던 문제 수정 (모든 드래그 후 자동 접힘 적용)
- UX 개선: 하위 메뉴가 있는 항목은 3뎁스로 이동 불가 (드래그·들여쓰기 모두 차단)
- UX 개선: ▲/▼ 이동 버튼 위치를 드래그 핸들 우측(아이콘 좌측)으로 이동 — 펼치기/접기 화살표와 구분
- UX 개선: 드래그 핸들 아이콘을 ≡ (hamburger) 스타일로 변경
v1.0.9 (2026-04-23)
- 버그 수정:
admin.php?page=hbu-gdrive등 플러그인 페이지 접근 시 권한 오류 수정 (PHP URL 정규화 제거 → 클라이언트 JS 에서 처리) - 버그 수정: 커스텀 메뉴(HE SORTS 추가 메뉴) 클릭 시 WP 관리자 사이드바에서 하위 메뉴가 펼쳐지지 않던 문제 수정 (
he-sorts-menu.js아코디언 열림 처리 추가) - 신규 기능: 항목 우측에 ▲/▼ 버튼 추가 — 드래그 없이 한 칸씩 위/아래로 이동 가능 (같은 뎁스·같은 부모 내에서만 이동)
- UX 개선: 저장·항목 추가·구분선·초기화 버튼을 상단 헤더 우측으로 이동 (이전 사이드바 컬럼 제거, 화면 공간 확보)
- UX 개선: 항목을 다른 뎁스로 이동(드래그, 들여쓰기/내보내기)하면 하위 메뉴를 자동 접힘 처리 (기존에는 이동 후 하위 메뉴가 전부 펼쳐졌음)
v1.0.8 (2026-04-23)
- 버그 수정: 2뎁스·3뎁스로 이동한 메뉴 클릭 시 프론트 404 에러 수정 (서브메뉴 URL
admin.php?page=정규화) - UX 개선: 드래그 시 접혀있는 하위 메뉴가 강제로 펼쳐지던 현상 수정 (수동으로 펼친 상태만 유지)
v1.0.7 (2026-04-23)
- 버그 수정: 커스텀 메뉴 항목의
target="_blank"설정이 실제 관리자 메뉴에 반영되지 않던 문제 수정 (admin_headJS 주입) - 버그 수정: 구분선 slug가 WordPress 기본 구분선과 충돌할 수 있던 문제 수정 (
separator-he-sorts-*형식으로 변경) - 보안 강화: 커스텀 메뉴 아이콘 필드에 이미지 URL 입력 시 올바르게 처리되도록 sanitization 개선
- 안정성: 드래그 depth 추적을
document.mousemove대신 SortableJSonMove콜백으로 교체 (Firefox 호환성) - 안정성:
he_sorts_dfs()순환 참조 방지 로직 추가 - 자동 업데이트 수정:
after_install()파일시스템 초기화 개선 및 같은 경로 이동 시 파일 삭제 버그 수정
v1.0.6 (2026-04-22)
- 버그 수정:
find_sub_entry()— 서브메뉴 항목을 다른 상위 메뉴로 이동한 경우 원본 부모에 없으면 전체$sub_index를 순회해 항목을 찾도록 수정 - 버그 수정:
collect_children()주석 및 로직 명확화 — WordPress$submenu가 최상위 slug 하나의 키만 지원하므로 depth-3 항목도 동일한$sub_key아래에 추가되도록 명시 - 버그 수정:
after_install()—$wp_filesystem이 null인 경우 WP_Error를 반환하도록 안전 처리 추가 - 버그 수정:
serializeList()(JS) —wp_slug,parent_id가 빈 문자열일 때null로 직렬화하도록 수정 - 버그 수정:
relocateDescendants()(JS) — 드래그 후 손자(depth-3) 항목의 DOM 순서가 뒤섞이던 문제 수정 - 버그 수정:
he-sorts-menu.css— PHP에서 부여하는 커스텀 메뉴 클래스(he-sorts-custom)와 CSS 선택자 불일치 수정 - 버그 수정: README.md 버전 뱃지를 실제 버전에 맞게 수정
v1.0.5
- 이전 버전
라이선스
GNU General Public License v2.0
제작
HE WORKS.
https://github.com/he-works