게시글
질문&답변
2024.05.08
single-book.php 파일은 워드프레스 기본 제공 파일인가요?
안녕하세요. 질문 감사합니다. 그런데 제가 답변이 너무 늦었네요. 죄송합니다 🙏 답을 드리지 않은 사이에 이미 수업에서 관련 내용을 들으셨을 것 같습니다. "61강 템플릿 우선순위" 가 정확히 질문하신 내용을 자세히 다루고 있으니까요. 아니면 아래 "인프런 AI 인턴"의 답변도 잘 돼 있어서, 그것만으로 금세 이해를 하셨을 수도 있을 것 같고요. 이미 질문이 해결되신 듯해 제가 답을 반복할 필요는 없을 것 같습니다. 그러나 죄송한 마음을 담아 조금 다른 설명을 드리겠습니다. URL에 따라 single.php 나 single-book.php 와 같은 템플릿을 불러오는 코드는 wp-includes/template-loader.php 에 있습니다. 이 파일의 69번째 줄을 보면 이게 싱글이라면(`is_single()`이 참이면) get_singular_template() 함수를 써서 템플릿이 뭔지 알아내라 하고 정의가 돼 있습니다. 'is_single' => 'get_single_template', 사실 위와 같이 배열로 돼 있는데, 배열 아래쪽의 79~91라인을 보면 결국 call_user_function() 으로 is_single 과 get_single_template 을 호출하고 있는 것을 볼 수 있습니다. get_single_template() 함수는 wp-includes/template.php 파일의 549번째 줄에 정의돼 있는데요. $templates 라는 배열에 single용 템플릿이 될 수 있는 파일명을 우선순위별로 쭉 담습니다. single-book.php 의 경우 get_single_template() 함수 안에서 그 모습을 찾아 볼 수 있습니다. 함수가 있는 파일에서 566번째 줄을 보면 템플릿 우선순위를 담는 $templates 배열에 single-{$object->post_type}.php 를 담고 있거든요. 이후 $templates 의 내용을 참고해서 최종 템플릿 파일을 고르는데요. get_single_template() → get_query_template() → locate_template() 순서로 들어가면서 실행이 됩니다. 이중 실제로 템플릿 후보가 될 파일이 있는지 검사하고 있으면 해당 경로를 리턴해 주는 역할을 하는 게 locate_template() 함수입니다. locate_template() 함수는 wp-includes/template.php 파일의 718라인에 정의돼 있는데요. 732라인을 보면 아래처럼 파일이 있는지 검사하는 코드를 볼 수 있습니다. if ( file_exists( $wp_stylesheet_path . '/' . $template_name ) ) { 제 답변이 조금이나마 도움이 되셨으면 좋겠습니다. 감사합니다.
- 1
- 2
- 70
질문&답변
2024.03.09
미디어에서 이미지 추가시 시간이 좀 느려서...
안녕하세요 🙂 질문 감사합니다. 워드프레스 미디어 업로더는 파일이 업로드되면 리사이즈를 수행합니다. 리사이즈가 느리면 업로드가 느리다고 느낄 수 있을 것입니다. 리사이즈는 서버 성능을 많이 탑니다. 가격이 낮으면 성능이 그만큼 떨어지고, 이미지 리사이즈는 성능을 타는 작업이기 때문에 느려집니다. 예컨대 오라클 클라우드의 무료 티어를 사용한다면 리사이즈는 상당히 느릴 겁니다. 또, 리사이즈용 플러그인이 설치돼 있다면 느릴 수 있습니다. 예컨대 이미지를 WebP로 변환하는 플러그인이나, 원본까지 리사이즈하는 플러그인, 리사이즈 개수를 늘리는 플러그인이 있을 수 있습니다. 그러나 느려도 정상적인 과정입니다. 물론 서버를 업그레이드하거나 플러그인을 비활성화하는 방법으로 해결할 수 있습니다. 미디어 업로드 기능을 디버깅해 보시려면 업로드한 파일이 어디로 전송되는지 찾아 보시면 됩니다. 우선 실마리는 미디어 업로더 페이지에 있습니다. 개발자 도구로 검사해 보시면 form의 action이 /wp-admin/media-new.php 를 가리키고 있는 것을 확인할 수 있습니다. 일단 이 파일을 살펴 보는 것도 도움이 될 것입니다. (사진)업로드를 해 보면 ajax 업로드 경로는 또 다른 걸 알 수 있습니다. (사진) /wp-admin/async-upload.php 인데요. 파일은 하나 올렸는데 두 번 요청이 간 것이 재밌네요. 첫 번째 요청에서는 파일을 multipart/form-data 로 전송한 것을 볼 수 있습니다. 응답으로 attachment_id 를 받습니다. (사진)두 번째 요청에서는 방금 받은 attachment_id 와 fetch 란 파라미터에 3 을 담아서 보내는데요. 응답은 HTML이 옵니다. (사진)(사진)응답받은 HTML은 업로드 결과를 표시하기 위한 것임을 알 수 있죠. 설명하다 보니 옆길로 좀 샜는데요. 이렇게 개발자 도구를 통해서 진입점을 찾으시고 디버깅하시면 되겠습니다. (참, 저는 파이어폭스에서 개발자 도구를 사용한 것인데요, 크롬에서는 표시가 조금 다릅니다. 그러나 기능은 같아서 금방 찾으실 수 있을 겁니다.) 즐거운 코딩 되시길 바랄 게요~! 감사합니다.
- 0
- 2
- 114
질문&답변
2023.12.30
wp_enqueue_style 이동
안녕하세요 김승범 님, 날카로운 질문 감사드립니다. 말씀하신대로 functions-setup.php 에 있던 코드를 functions-enqueue-scripts.php 파일로 옮기는 과정이 영상에서 누락돼 있습니다. 저도 말씀을 듣고 강의 영상을 확인해 보고 나서야 알았습니다. 영상을 보니 9분 35초의 Git 커밋 과정에 코드가 옮겨진 것이 명확히 표현되고 있네요. 감사합니다.
- 0
- 2
- 88
질문&답변
2023.09.11
wp_editor ($editor_name) 관련
안녕하세요. editor_name 은 아마 editor_id 를 말씀하시는 것 같습니다. textarea_name 을 변경해서는 첨부해 주신 상황을 재연하지 못했기 때문입니다. 질문하신 이슈는 - 냐 _ 에 따라 발생하는 이슈는 아닌 것 같습니다. 그게 아니라 add_meta_box 의 id 파라미터 값과 wp_editor 의 editor_id 파라미터 값이 충돌한 것으로 보입니다. 아래 코드처럼 말입니다. add_meta_box('book-toc', '목차', function () { wp_editor('', 'book-toc', [ 'textarea_name' => 'meta[toc]', ]); }); 위에서 book-toc 를 값으로 넣은 넣은 두 파라미터( id , editor_id )는 받은 값을 HTML id 값으로도 사용합니다. 그런데 id는 문서에서 유일해야 합니다. 따라서 워드프레스는 id 중복을 염두에 두지 않고 코드를 작성했을 것입니다. 그래서 깨진 것이죠. add_meta_box 의 book-toc 든, wp_editor 의 book-toc 든 하나만 뒤에 숫자를 붙이든 뭐든 해서 이름이 동일하지 않게 만들면 해결됩니다. 예컨대 아래처럼만 해 줘도 해결됩니다. - 나 _ 에 따른 이슈는 아닌 것이죠. add_meta_box('book-toc-box', '목차', function () { wp_editor('', 'book-toc', [ 'textarea_name' => 'meta[toc]', ]); }); 감사합니다.
- 0
- 1
- 198
질문&답변
2023.07.10
강의변경
안녕하세요. 제 강의를 수강해 주셔서 감사합니다 🙏 클라이언트 편 보다는 어드민 편이 더 필요한 강의셨군요. 그런데 수강생의 강의를 변경하는 것은 제 권한으로는 되지 않습니다. 한 번 인프런 고객센터로 문의를 해 봐 주시겠어요? 강사도 강의 변경에 동의를 했다고 하면서 문의해 주시면 될 것 같습니다. 감사합니다.
- 0
- 1
- 242
질문&답변
2023.05.19
action-test.php 변경관련
안녕하세요, 행복만들기 님. 질문 감사합니다. 말씀하신 것 중에 "do_action을 호출하는 부분"이 무엇을 의미하는지 정확히 모르겠습니다. 다만 action-custom.php 를 의미하는 것이라면 수정하셔도 됩니다. 그 파일은 테마나 플러그인처럼 코어가 아닌, 제3자 개발자에게 개방해 둔 부분으로 상정한 파일입니다. 그러나 action-test.php 과 action-init.php 파일은 코어 파일로 상정한 예제입니다. 그러니까 실제 워드프레스 파일과 이 예제에서 작업한 파일을 연관지으면 아래와 같습니다. wp-includes/plugin.php ( add_action() , do_action() 함수 정의) → action-init.php do_action(...) 코드가 있는 많은 코어 파일들 → action-test.php 제3자 개발자가 개발하는 플러그인, 테마 파일들 → action-custom.php 혹시 추가로 궁금한 사항이 있다면 질문해 주시면 감사하겠습니다 :)
- 0
- 1
- 307
질문&답변
2023.03.14
APMsetup을 활용
안녕하세요, 황자영 님. APMSetup은 2010년에 나온 버전7 이후로 개발이 중단된 것으로 알고 있습니다. 지금은 공식 웹사이트도 사라져서 정보를 알기가 힘들지만요. 질문을 받고 검색을 좀 해 보니 당시 마지막 버전의 APMSetup에 들어있던 PHP 버전은 5.2.12였던 같습니다. 그런데 현재 워드프레스 최신 버전인 6.1의 최소 요구사항은 PHP 5.6입니다. 따라서 APMSetup에서 최신 워드프레스는 돌아가지 않습니다. 워드프레스 5.1이 PHP 5.2 위에서 돌아가는 마지막 버전이었습니다. (참고: https://make.wordpress.org/core/handbook/references/php-compatibility-and-wordpress-versions/ ) 윈도우라면 xampp나 bitnami wamp, 맥이라면 mamp 같은 것을 사용하시면 됩니다. 감사합니다.
- 0
- 1
- 286
질문&답변
2023.01.27
미디어 라이브러리 작동안함문제
안녕하세요, luminary282 님. 질문 감사합니다. 답변이 좀 늦었습니다 😅 테마가 두 개라는 이유로 미디어 라이브러리가 제대로 작동하지 않는 것은 이상한 일입니다. 함께 문제를 파악해 보면 좋겠습니다. 우선 명확한 에러 메시지를 찾아 보는 게 좋겠습니다. 미디어 라이브러리에 파일을 업로드하는 것은 ajax로 작동합니다. 이 경우 에러 로그를 보는 방법은 두 가지입니다. 개발자 도구에서 ajax 에러 보기 먼저 개발자 도구에서 콘솔 탭을 누르고, 콘솔 탭의 톱니바퀴를 눌러 설정을 연 다음 XMLHttpRequest 기록을 체크합니다(아래 이미지 참고). (사진) 다음으로 업로드 에러를 재연합니다. 그러면 개발자 도구의 콘솔 쪽에 ajax 호출 로그가 기록되는데요. 요청이 실패하면 빨간 색으로 뜰 겁니다. 그걸 클릭합니다(아래 이미지 참고). (사진) 그러면 네트워크 탭으로 이동을 하면서, 현재 페이지에서 보낸 요청들을 모두 볼 수 있는데요. async-upload.php 가 빨간색으로 표시된 게 있을 겁니다. 그걸 클릭합니다. 그러면 오른쪽에 헤더, 페이로드, 미리보기 등 이 요청에 관한 여러 정보를 볼 수 있도록 탭으로 구성된 정보가 나올 텐데요. "미리보기" 탭을 선택합니다. 그러면 응답 받은 에러 메시지를 보실 수 있을 겁니다(아래 이미지 참고). (사진) 단, 이 에러 메시지가 나오려면 php.ini 파일에서 display_errors 가 켜져 있어야 하고, 워드프레스의 wp-config.php 에서도 WP_DEBUG 가 true 로 설정돼 있어야 합니다. 아파치 로그로 보기 개발자 도구가 아니라 아파치 로그를 확인해 보시는 방법도 있습니다. 이에 대해서는 자세한 설명을 드릴 필요는 없겠지요? 위 두 방법 중 하나를 이용해서 명확한 에러 메시지를 확인한 뒤 구글에 검색을 해 보세요. 이 때 내 개발환경에만 작용하는 특수한 부분 - 예컨대 파일 경로 같은 것은 빼고 검색을 하시는 게 좋습니다. 그러면 아마 십중팔구 해결책을 찾으실 수 있을 것입니다. 이렇게 해서 해결이 되신다면 결과를 남겨 주세요. 그러면 다른 분들에게도 도움이 될 것 같습니다 😀 만약, 해결이 잘 되지 않는다면 역시 추가 질문을 남겨 주세요. 같이 해결을 하면 됩니다. ✊ 감사합니다.
- 0
- 2
- 394
질문&답변
2023.01.18
WP 전반적인 질문입니다.
안녕하세요 Ikostar 님, 질문 감사합니다 :) 이번에는 전반적인 질문을 해 주셨네요. 힘이 닿는 대로 답을 해 보도록 하겠습니다. 1. 테마를 수정할 때 테마가 제공하는 문서를 참고해야 하는지, 아니면 테마와는 상관없이 wp core에서 제공하는 특정 포인트에 액션과 훅을 걸어서 사용하는 것인지 질문을 해 주셨는데요. 둘 다라고 할 수 있겠습니다. 다음의 두 가지 설명을 들어 보세요. (1) 액션과 훅은 주로 코어의 동작에 변경을 가하게 됩니다. (2) 테마는 워드프레스가 테마 제작을 위해 제공하는 여러 코어 함수를 사용 합니다. 테마도 여러가지 코어 함수를 사용하므로, 기본적으로 여러가지 액션과 훅을 사용하게 됩니다. 그리고 워드프레스 제작 경험이 많다면 테마에 어떤 변경을 가할 때 액션이나 훅을 사용하면 되겠구나 하는 것을 알 수 있습니다. 말씀하신 커스텀 분류가 대표적인데요. 어떤 테마가 커스텀 분류를 가지고 있다면, 그 테마는 분명히 init 액션에 함수를 걸어서 커스텀 분류를 만들고 있을 것입니다. 커스텀 분류의 레이블을 수정하고 싶다면 그 부분을 찾아 내면 되는 것이지요. 물론 테마가 단지 액션과 훅으로만 이뤄지는 것은 아닙니다. 용도에 맞는 템플릿 파일들을 배치해야 하는데요. 그건 클라이언트편 강의에 나오게 될 테니 여기서 더 자세히 설명하지는 않겠습니다. 한편, 자신만의 문서를 가진 테마도 있습니다. 예컨대 Elegant 테마는 빌더를 내장하고 있는데, 빌더의 커스텀 모듈 등을 만들 수 있도록 개발자 문서를 제공 합니다. 테마를 확장할 수 있도록 테마 자신의 액션 포인트, 필터 포인트를 가지고 있을 것이고요. 참고로, 액션·필터 포인트를 만드는 것은 쉽습니다. 제가 액션과 필터의 개념을 어드민 편에서 무료로 공개해 뒀는데요, 클라이언트 편만 구입하신 분들도 이 개념은 아셔야 하기 때문에 그렇게 했습니다. ( 여기 설명란을 보시면 어드민 편 강의로 가는 링크가 있습니다) 해당 강의를 보신다면 액션/필터를 어떻게 만드는지 금세 이해하실 수 있을 겁니다. 자신만의 문서를 가진 빌더들을 저는 개인적으로 그리 좋아하지는 않습니다. 워드프레스라는 일종의 "빌더" 위에 또 하나의 빌더를 얹은 것이니까요. 그래서 개념 자체가 좀 무겁게 느껴집니다. 빌더를 사용해 본 경험상으로는, 클라이언트단은 어떻게 최적화를 한다고 해도 관리자단은 너무 답답해서 쓰기 힘들었습니다. 아마도 제가 개발자라서 그런 것일 겁니다. 2. URL을 호출하는 순간 로드되는 엔트리 포인트는 테마의 index.php가 아니라 워드프레스 루트의 index.php입니다. 테마의 어디서 functions.php가 인클루드 되는지는 저도 찾아 봐야 합니다. 찾아 보는 방법은 어렵지 않을 것 같습니다. functions.php 맨 앞줄에 오타를 하나 내 두면 functions.php를 인클루드하는 순간 에러가 발생할 테니 그것의 스택 트레이스를 보면 어디에서 인클루드를 하는지 알 수 있을 겁니다. 아마 xdebug의 step by step 기능으로 하나씩 보는 것보다 이게 더 편할 것 같습니다. 참고로 테마의 index.php는 호출된 URL에 딱 맞는 템플릿이 없을 때 최종적으로 사용되는 템플릿입니다. 이것도 클라이언트편 강의에 나오니 천천히 보시면 될 것 같습니다. 더 일찍 보고 싶으시면 “워드프레스 테마에서 템플릿 파일 매칭 순서” 를 한 번 살펴 보시면 나중에 강의를 들을 때 도움이 될 수도 있을 것 같습니다. 3. 액션과 필터에 대해 위에서 설명을 했으니 세 번째 질문에 대한 답을 벌써 찾으셨을 지도 모르겠습니다. 기본적으로 워드프레스 코어에는 액션과 필터가 많이 있습니다(전체 검색을 해 보시면 알 수 있으실 겁니다). 그리고 워드프레스 코어가 액션과 필터의 이름을 바꾸기 전에는 이것이 변해선 안 됩니다. 그러니까 코어는 건드리지 말라고 하는 것이죠. 워드프레스처럼 널리 사용되는 툴은 하위호환성을 유지하는 것이 중요하기 때문에 웬만해서는 액션이나 필터를 바꾸지 않습니다. 한편, 앞서 말씀드렸듯이 커스텀 액션과 필터를 만드는 것도 어렵지 않습니다. 자신의 액션과 필터를 만들어서 활용하는 플러그인이나 테마도 있습니다. 이런 플러그인이나 테마들은 그 플러그인이나 테마의 확장 프로그램을, 다른 개발자들이 만들 수 있도록 하는 것이 목적입니다(즉, 워드프레스의 써드파티가 아니라 플러그인·테마의 써드파티인 것이죠. 써드파티의 써드파티, 플랫폼 위의 플랫폼입니다). 액션과 필터는 코어의 코드를 건드리지 않으면서도 코어의 동작을 외부에서 조작하기 위해 필요한 것인데요. 플러그인이나 테마에 액션이나 필터 포인트를 만든다면, 그 플러그인이나 테마를 외부에서 건드려 다른 사람들이 확장할 수 있도록 하는 게 목적인 것이지요. 여기까지 답을 해 봤는데요, 원하시는 내용이 들어있는지 모르겠습니다. 그렇지 않다면 편하게 좀더 상세한 질문을 남겨 주세요 :) 그러면 제가 힘 닿는 대로 다시 답을 해보도록 하겠습니다. 감사합니다.
- 0
- 1
- 275
질문&답변
2023.01.07
xml 가져오기 불가
안녕하세요, Ikostar님. admin-ajax.php 에 404 Not Foud가 뜨는 상황이시군요. nginx로 설정을 마치셨다니 대단합니다 👍 404에러의 원인은 당연히 아실 테지만 요청한 경로에 응답할 자원이 없기 때문입니다. 위 경우에는 실제로 파일이 없을 수도 있고, 경로 매핑 설정이 잘못된 것일 수도 있습니다. 제가 nginx 경험이 많지는 않기 때문에 추정으로는 원인을 말씀드리기가 힘듭니다. 게다가 Ikostar님께서 설정을 어떤 방식으로 하셨는지 모르는 상황이기 때문에 더욱 그렇습니다. 다음 사항을 알려 주시면 저도 한 번 해 보고 도움을 드릴 수 있지 않을까 싶습니다. 워드프레스 버전과 설치 경로 nginx 설정 파일의 내용 전부 워드프레스 고유주소(permalink) 설정 질문해 주셔서 감사드리고, 한 번 같이 해결해 보면 좋겠습니다.
- 0
- 1
- 255