워드프레스 Walker 메소드 경고 오류 해결

워드프레스 정보를 제공하는 블로그 Avada 2024. 8. 19. 07:03 • 댓글:

워드프레스 디버그 모드를 비활성화하면 경미한 경고는 표시되지 않습니다. 하지만 어떤 워드프레스 사이트에서 디버그 모드를 false로 지정해도 경고(warning) 메시지가 표시되고 워드프레스에 로그인하지 못하는 문제가 발생하여 문제 해결을 맡았습니다.

워드프레스 Walker 메소드 경고 오류 해결

클라께서 오래된 워드프레스 사이트를 최신 버전으로 업데이트한 후에 사이트에 화면에 아무 내용이 표시되지 않아서 사이트를 원래 상태로 되돌렸지만 화면에 경고가 표시되는 문제가 나타났습니다.

경고나 알림 메시지는 보통 DEBUG 모드를 비활성화하면 사라집니다. 하지만 해당 사이트는 살펴보니 특이하게 경고가 사라지지 않았습니다.

다음과 같은 경고가 화면 상단에 표시되었습니다.

Warning: Declaration of Imbalance2_Walker_Nav_Menu::start_lvl(&$output, $depth) should be compatible with Walker_Nav_Menu::start_lvl(&$output, $depth = 0, $args = Array) in /host/home1/html/wp-content/themes/imbalance2/functions.php on line 102

Warning: Declaration of Imbalance2_Walker_Nav_Menu::end_lvl(&$output, $depth) should be compatible with Walker_Nav_Menu::end_lvl(&$output, $depth = 0, $args = Array) in /host/home1/html/wp-content/themes/imbalance2/functions.php on line 102

기술적인 측면에서 이 경고의 원인과 해결 방법은 다음을 참조할 수 있습니다. 챗GPT의 설명을 이용하였습니다.

이 경고는 `Imbalance2_Walker_Nav_Menu` 클래스의 `start_lvl` 및 `end_lvl` 메소드의 매개변수 정의가 부모 클래스인 `Walker_Nav_Menu` 클래스와 일치하지 않기 때문에 발생합니다. 부모 클래스에서는 `start_lvl`과 `end_lvl` 메소드가 `$depth`와 `$args`라는 매개변수를 기본값과 함께 사용하지만, `Imbalance2_Walker_Nav_Menu` 클래스에서는 `$args` 매개변수가 정의되지 않았거나 기본값이 누락된 상태입니다. 이로 인해 PHP는 부모 클래스와 자식 클래스 간의 메소드 시그니처가 일치하지 않는다고 경고하는 것입니다. 이 문제를 해결하려면 자식 클래스에서 부모 클래스와 동일한 매개변수 시그니처를 사용해야 합니다.

하지만 이것은 그냥 표면적으로 이해한 것이고 문제의 근본적인 원인을 파악하지는 못하고 있습니다.

문제를 상세히 이해하기 위해서는 워드프레스 버전, PHP 버전, 설치된 테마와 플러그인의 버전 등을 모두 고려해야 합니다.

이 사이트의 워드프레스 버전은 4.3.34였습니다.

워드프레스 4.3.34 버전은 최근에 릴리스되었지만, 4.3 버전은 9년 전에 공개되었습니다.

4.3 버전이 9년 전에 릴리스되었지만 아직까지도 꾸준히 보안 취약점 등에 대한 패치가 제공되고 있습니다. 

해당 사이트의 PHP 버전은 7.3.25 버전이었습니다.

아마도 5.x 버전을 사용하다 업데이트를 위해 PHP 버전을 7.3으로 변경한 것 같습니다.

워드프레스 4.3 버전은 PHP 7.0 이상과는 호환이 되지 않습니다.

워드프레스 4.3 버전은 PHP 7.0 이상과는 호환이 되지 않지만 해당사이트의 PHP 버전이 7.3이어서 이상한 문제가 나타나는 것으로 생각됩니다.

워드프레스 테마도 너무 오래되어 PHP 7.3과 호환이 되지 않는 것 같습니다.

Imbalance 2라는 테마인데요, 2011년 6월에 출시되었고 (무려 13년 전!) 이후로 업데이트가 안 되고 있습니다.😥

결론적으로 워드프레스와 PHP 버전 간 호환이 되지 않고 워드프레스 테마도 13년 전에 출시된 버전이라서 PHP 버전과 호환이 되지 않는 것이 해당 사이트 문제의 근본 원인인 것 같습니다.

이 경우 PHP 버전을 5.6 버전으로 되돌리면 문제가 해결될 것으로 보이지만, 5.6 버전은 사실 버전이 너무 낮고 보안 문제도 있을 수 있습니다.

워드프레스 6.6 버전에서는 PHP 7.0, 7.1에 대한 지원을 중단했습니다. 

워드프레스를 안전하게 운영하려면 워드프레스, 테마, 플러그인을 최신 버전으로 업데이트하고 PHP 버전도 7.4 이상을 이용하는 것이 바람직합니다.

이번 사이트의 경우 어떤 식으로든 경고를 제겋고 로그인이 되도록 수리는 했습니다만, 근본적인 해결책이 될 수는 없었습니다. 근본적으로 해결하려면 워드프레스와 플러그인을 모두 최신 버전을 업데이트하고 PHP 버전도 가급적 7.4 이상을 업그레이드하고, 워드프레스 테마를 바꾸는 것을 고려할 수 있습니다.

테마를 바꾸는 경우 블로그 위주의 사이트는 별 문제가 없지만, 일반 사이트의 경우 페이지들을 새로 만들어야 할 수도 있습니다. 블로그를 사용한다면 뉴스페이퍼와 같은 테마를 사용하면 쉽게 퀄리티 높은 사이트를 만들 수 있습니다. 가볍고 빠른 블로그를 원하는 경우에는 GeneratePress와 같은 테마가 좋은 옵션일 수 있습니다.

워드프레스나 웹호스팅 문제 해결에 어려움을 겪는 경우 여기에서 서비스(유료)를 의뢰하실 수 있습니다.😀

참고

https://avada.tistory.com/3417

 

아바다 테마가 설치된 워드프레스 사이트에서 멀웨어 (악성코드) 제거 작업

어제는 워드프레스 베스트셀링 테마인 아바다 테마가 설치된 워드프레스 사이트에서 멀웨어를 제거하는 작업을 수행했습니다. 사이트를 오랫동안 업데이트를 하지 않고 방치하다 악성코드에

avada.tistory.com

https://avada.tistory.com/2897

 

엘리멘터 무료 버전 vs. 프로 버전 비교

엘리멘터(Elmentor)는 500만 개가 넘는 사이트에 설치되어 사용되고 있는 인기 워드프레스 페이지 빌더 플러그인입니다. 엘리멘터는 무료 버전과 프로 버전으로 제공됩니다. Elementor 프로 버전에서

avada.tistory.com