워드프레스의 특정 메뉴 내비게이션에 로그인/로그아웃 메뉴를 항목을 추가하려는 경우에 이 글에서 설명하는 방법을 사용할 수 있습니다. 플러그인을 사용하지 않고 로그인 시 메뉴에 로그아웃을, 로그아웃 시 메뉴에 로그인을 표시하려는 경우 유용합니다.
[ 이 글은 2015년 9월에 작성되었지만 글을 새롭게 수정하여 재발행되었습니다. ]
플러그인을 사용하지 않고 워드프레스 메뉴에 로그인/로그아웃 메뉴 항목을 추가하는 방법
플러그인을 사용하지 않고 로그인/로그아웃 메뉴 항목을 메뉴에 표시하고 싶은 경우 다음 코드를 워드프레스 테마 함수 파일에 추가하면 됩니다.
// 로그인 시 로그아웃 메뉴를 표시하고 로그아웃 시 로그인 메뉴 표시하기
// Show Login menu item when logged out and show Logout menu item when logged in
add_filter( 'wp_nav_menu_items', 'add_loginout_link', 10, 2 );
function add_loginout_link( $items, $args ) {
if (is_user_logged_in() && $args->theme_location == 'primary') {
$items .= '<li><a href="'. wp_logout_url() .'">로그아웃</a></li>';
}
elseif (!is_user_logged_in() && $args->theme_location == 'primary') {
$items .= '<li><a href="'. site_url('wp-login.php') .'">로그인</a></li>';
}
return $items;
}
위의 함수를 사용하면 로그아웃 사용자에게는 "로그인" 메뉴 항목이 표시되고, 로그인 사용자에게는 "로그아웃" 메뉴 항목이 표시됩니다. 위에서 theme_location 파라미터의 값을 해당 내비게이션에 맞게 수정하도록 합니다(예: main, secondary).
theme_location
theme_location은 메뉴 위치에 따라 다르며(예: 상단 메뉴, 메인 메뉴, 푸터 메뉴 등), 테마에 따라 이름이 조금씩 다릅니다.
예를 들어, 인기 다목적 테마 중 하나인 엔폴드 (Enfold) 테마의 경우 다음과 같은 theme_location이 사용될 수 있습니다.
- avia (엔폴드 메인 메뉴)
- avia1 (엔폴드 보조 메뉴)
- avia2 (엔폴드 푸터 메뉴)
인기 우커머스 테마 중 하나인 Flatsome (플랫섬) 테마의 theme_location은 다음과 같습니다.
- primary (메인 메뉴)
- primary_mobile (모바일 메인 메뉴)
- footer (푸터 메뉴)
- top_bar_nav (상단 메뉴)
- my_account (내 계정 메뉴)
베스트셀링 테마인 아바다 (Avada) 테마의 theme_location은 다음과 같습니다.
- main_navigation (메인 내비게이션)
- top_navigation (상단 내비게이션)
- mobile_navigation (모바일 내비게이션)
- 404_pages (404 Useful Pages)
- sticky_navigation (고정 헤더 내비게이션)
이 블로그에 현재 사용 중인 GeneratePress 테마의 경우 다음 theme_location이 사용됩니다.
- primary (주 메뉴)
- secondary (보조 메뉴)
- slideout (Off Canvas 메뉴)
자식 테마를 만들어 코드를 넣으세요
위의 코드는 사용 중인 워드프레스 테마의 함수 파일(functions.php)에 추가해주면 되며 가능한 경우 차일드 테마(자식 테마)를 만들어서 작업하시기 바랍니다. 자세한 방법은 여기를 참고해보세요.
파일을 수정하기 위해서는 FTP에 접속할 수 있어야 합니다. 워드프레스에서 FTP 클라이언트 사용 방법은 여기를 참고하세요.
위의 방법은 플러그인을 사용하지 않고 할 수 있는 장점이 있지만, 초보자에게는 어려울 수 있습니다. 상기 방법이 어려운 경우 플러그인을 사용하여 로그인하면 메뉴가 로그아웃으로, 로그아웃하면 로그인으로 자동으로 바뀌도록 하는 방법도 가능합니다. 자세한 내용은 로그인하면 로그인 메뉴가 로그아웃 메뉴로 바뀌도록 하기 글을 참고해보시기 바랍니다.
혹시 unicon 테마의 경우에는 메인 페이지에 띄우고싶을 경우
테마 로케이션 값이 뭘까요...ㅠㅠ
유니콘 테마 (Unicon Theme)는 Themeforest에서 판매되는 유료 워드프레스 테마네요.
유료라서 제가 확인은 할 수 없지만 bbPress 포럼 글 (https://bbpress.org/forums/topic/adding-profile-link-to-menu/ )을 보면 유니콘 테마의 theme_location 값은 아마 다음과 같을 것 같습니다.
main_navigation ->Main Navigation (메인 네비게이션)
footer_navigation ->Footer Navigation (푸터 내비게이션)
topbar_navigation ->Topbar Navigation (톱바 내비게이션)
잘 안 되면 알려주세요.
시간이 날 때 theme_location을 확인하는 방법에 대한 내용을 추가해보겠습니다.
안녕하세요^^
theme_location 값을 확인하려면 어디에서 할 수 있는지요...?
primary, secondary, main, 기본메뉴...어떤걸 입력해도 메뉴에 반영이 안되네요...
https://uploads.disquscdn.com/images/dedb2c9f675d1373670985ad3cb4536ab61db20168b3e4e26aaf3b511e8e5bdb.png
안녕하세요?
블로그를 방문해주셔서 감사합니다.
Enfold 테마(https://www.thewordcracker.com/go/enfold )를 사용하고 계시네요.
Enfold 테마를 살펴보니, 아마 다음 중 하나 같습니다.
- avia
- avia1
- avia2
- avia3
한번 테스트해보시고 잘 되는지 확인해보시기 바랍니다.
avia 로 했더니 메뉴에 반영되네요!
역시 워드프레스는 워드크래커군요!!
감사합니다. 좋은 저녁되세요~^^
문제가 해결되어 다행이네요.
즐거운 저녁 시간 되시기 바랍니다.
많은 도움이 되었습니다 감사합니다 :)
블로그를 방문해주셔서 감사합니다. 즐거운 하루되세요^^
사용하는 테마의 functions.php에 위 코드를 삽입하고 로케이션 파라미터 값을 넣어줬는데 아무것도 뜨지않습니다.ㅠㅠ제가 잘 몰라서 그러는데 추가적으로 해줘야 할게 또 있나요?
안녕하세요?
혹시 오류가 발생하는건가요?
오류가 발생하는 경우는 함수 파일에 제대로 넣지 않아서 이거나 문법적으로 오류가 발생했을 수 있습니다.
오류는 발생하지 않고 메뉴에 아무런 변동이 없다면, 우선 캐시를 삭제해보고,
위의 코드에서 아래 부분(두 군데)을 삭제해보시고 테스트해보시기 바랍니다.
만약 메뉴에 제대로 추가된다고 한다면 theme_location이 잘못된 것입니다.
theme_location이 잘못되었던게 맞네요.저는 외모-메뉴에서 탑메뉴바를 top_menu로 만들었다고해서 location에 top_menu넣어줬는데 secondary로 넣어야하는 거군요. 주메뉴는 primary구요. 이제 알았네요. 감사합니다.
좋은 정보 감사합니다.
너무 초보이다보니 어떤파일 php파일을 수정해야 하는지 모르겠네요.
안녕하세요?
제 개인 블로그를 방문주셔서 감사합니다.
사용 중인 테마의 함수 파일에 추가해주시면 됩니다.
FTP를 사용하시기 바랍니다.