소개
16년차 풀스택 웹개발자입니다. PHP를 주로 다루고, 그 중에서도 라라벨과 워드프레스로 가장 많이 일합니다. 개인 용도로 워드프레스 플러그인도 몇 개 만들었습니다.
더 자세한 소개는 블로그의 소개를 참고하세요. https://mytory.net/about
강의
전체 2수강평
- 워드프레스 제대로 개발하기 - 클라이언트 편
- 워드프레스 제대로 개발하기 - 클라이언트 편
- 워드프레스 제대로 개발하기 - 클라이언트 편
게시글
질문&답변
2024.09.04
XML 불러오기 불가 (이미지만)
안녕하세요. 질문 감사드립니다 ☺제가 당장 자세히 살펴볼 시간은 되지 않아서 우선 한 가지 요청을 먼저 드릴 게요. 아파치의 에러 로그를 좀 공유해 주시겠어요? 그래야 원인 파악이 수월할 것 같습니다.사소한 에러라 사용에 문제는 없겠지만 이런 걸 탐구하는 과정에서 실력이 늘 수 있기 때문에 시간만 허락한다면 살펴 보는 것을 권해 드립니다. (실무에서는 시간 때문에 불가피하게 포기해야 하는 경우도 있겠지만 연습에서는 그러지 않아도 되니까요.)감사합니다 😊
- 0
- 1
- 39
질문&답변
2024.07.14
POST http://localhost/wordpress/wp-admin/admin-ajax.php 400 (Bad Request)
안녕하세요 wlalsl_0813님. 질문 감사합니다. ☺Woody code snippets 플러그인으로 파일 수정 없이 PHP 코드를 입력하려고 하신 것으로 보입니다. 그리고 ajax action을 걸었는데, 뜻대로 안 된 것으로 보이고요.흥미로운 주제였어요.결론부터 말하면 해법은 간단합니다. 폼(HTML, JS)과 PHP 액션 코드를 분리해 보세요. PHP add_action 관련 코드는 아래처럼 "코드 실행처(Where to execute the code?)"를 Run Everywhere로 설정하세요. 그리고 폼은 원래대로 숏코드로 노출하시면 됩니다.(사진)왜 이렇게 해야 하는 걸까요?PHP는 모든 요청/응답 세트가 독립적입니다. 모든 요청/응답 세트가 독립적인 것은 웹의 특성이기도 한데요. 웹의 특성과는 별개로 서버측 언어로서 JAVA 등과는 다른 PHP 고유의 특성이기도 합니다(더 자세한 내용은 https://mytory.net/archives/13147 를 참고하세요). 좀더 자세히 설명하자면요. 위 코드 스니펫을 숏코드로 입력한 페이지(이하 "폼 페이지"라고 부르겠습니다)와 admin-ajax.php는 별개의 프로세스에 놓인다는 것입니다. 즉, admin-ajax.php가 호출될 때는 wlalsl_0813님이 넣으신 add_action이 실행되지 않는다는 것입니다. 다시 정리하면 아래와 같습니다.1. 폼 페이지를 호출할 때는 add_action이 실행됩니다.2. 폼 페이지에서 admin-ajax.php를 호출할 때는 add_action이 실행되지 않습니다. 폼 페이지를 로드한 것이 아니니까 당연하지요. 그래서 요청한 ajax 관련 응답할 액션이 없어 400 에러가 발생합니다.그래서 해법은 폼 페이지에서 ajax 응답을 할 수 있게 만들거나, add_action이 admin-ajax.php 호출시에도 실행되게 하거나 둘 중 하나입니다.폼 페이지에서 ajax 응답을 하도록 하는 것이 더 복잡하기 때문에 add_action을 어디서나 실행될 수 있게 만드는 것이 낫습니다.그리고 Woody code snippets 플러그인은 어디서나 실행되는 PHP 코드를 입력하도록 제공을 해주네요. 그것이 위에서 말한 해법입니다.신선한 질문 주셔서 감사합니다 😊
- 0
- 1
- 181
질문&답변
2024.06.27
플러그인 개발에 대해서 궁금합니다
안녕하세요. 좋은 질문 감사합니다.사실 플러그인과 테마 개발에 사용되는 기술은 거의 동일해서 제 수업을 듣고 나면 플러그인 개발도 얼마든 하실 수 있습니다. 플러그인이라는 게 추가적인 동작(Action)을 제공하거나, 내용을 변경(Filter)하는 것이니까요.테마가 index.php와 style.css로 시작하는 것처럼 플러그인은 규칙대로 폴더를 만들고 임의의 php 파일에 주석을 달아 워드프레스에 인식을 시킨 후 활성화해 주면 동작합니다.테마는 사이트의 외관 개발에 적합하고 하나의 테마만 활성화할 수 있다는 말씀은 맞습니다. 플러그인으로 외관에 관여할 수 있지만 한계가 있죠. 그래서 플러그인은 내부적인 동작 개발에 적합하고 여러 플러그인을 활성화할 수 있다는 말씀도 맞습니다.그러나 너무 도식적으로 생각하실 필요는 없습니다. 테마에도 내부적인 동작이 들어갑니다. 대신 이 동작은 하나의 테마에 적합하게 만들면 되기 때문에 좀더 간편한 것이죠. 플러그인도 외관에 얼마든지 관여할 수 있습니다. 테마로 구현할 때보다 좀 귀찮긴 하지만요. 그러나 플러그인으로 외관에 관여해야 하는 경우도 없지 않을 겁니다.제 생각에는 테마로 만들 것이냐 플러그인으로 만들 것이냐는 기술적인 차이도 조금 있기는 하지만, 그보다는 사용 목적이 더 중요한 기준이 되는 것 같습니다. 혼자 사용할 거라면 테마 기능의 일부로 넣으면 되는 것이고, 여러 사이트에서 사용하게 할 것이라면 플러그인으로 만드는 것이죠.예컨대, SNS 공유 버튼을 다는 기능을 제공하는 플러그인들이 많이 있습니다. 그러나 저는 특정 사이트를 위한 테마를 개발할 때 그걸 플러그인으로 구현하기보다는 테마 코드의 일부로 집어넣습니다. 그편이 디자인과 어우러지도록 깔끔하게 만들기 좋거든요. 굳이 범용성을 추구할 필요도 없고요.그러나 만약 제가 모든 사이트를 위해서 깔끔한 SNS 공유 버튼을 다는 기능을 제공하고자 한다면 플러그인으로 구현해야겠죠. 그만큼 코드도 작성하기 까다로울 겁니다.다른 많은 기능도 마찬가지입니다. 모든 플러그인 기능은 테마에 코딩해 그 기능을 제공할 수 있습니다. 코드가 거의 같으니까요. 그러나 범용적으로 다른 모든 사이트에도 그 기능을 제공하고자 한다면 플러그인으로 개발하면 되는 것입니다.혹시 추가적인 질문 있으면 남겨 주세요.감사합니다 :)
- 0
- 2
- 154
질문&답변
2024.06.10
워드프레스 댓글 수정 삭제
안녕하세요, YOU&ME 님. 질문 감사합니다.댓글에 비밀번호를 넣고, 그걸 이용해서 수정과 삭제를 할 수 있게 만들려고 하시는군요.워드프레스는 기본적으로 쿠키를 기반으로 댓글 입력을 기억합니다. 계정에 로그인해 댓글을 입력한 것이 아니라면 댓글을 입력한 컴퓨터에서만 댓글을 수정할 수 있죠.제가 관련 작업을 해 본 것은 아닙니다. 알려주신 《반연간 문학수첩》 2024년 상반기호 출간 기념 매거진 토크는 biscuitpress라는 업체에서 커스텀 작업을 한 것으로 보입니다. 따라서 소스에 접근하기는 힘들 것 같습니다. (다만, 질문에서도 언급하신 블로그를 운영중이신 것 같으니 직접 물어 보셔도 좋을 것 같습니다. 원리를 알려 달라고 하면 대략의 방법은 알려주실 지도 모르니까요.)관련 플러그인은 없는지 찾아 봤는데 쉽게 나오지는 않는군요. 어쩌면 그런 플러그인이 없을지도 모르겠습니다.코딩 개요제가 관련 작업을 해 본 것은 아니지만, 아래처럼 기본적인 설계를 해볼 수 있을 것 같습니다.만약 비밀번호를 기반으로 댓글을 수정할 수 있게 하시려면 댓글 출력 쪽에 필드를 추가로 만드시고, 댓글이 신규 저장되는 시점에 훅을 걸어서 코멘트 메타 정보로 비밀번호를 저장하셔야 할 것 같습니다.디비 테이블을 보시면 wp_commentmeta라는 테이블이 있어요. 포스트메타가 포스트에 관한 여러 정보를 저장하는 테이블이라면 코멘트메타는 코멘트에 관한 여러 정보를 저장하는 테이블입니다.사용법은 포스트메타와 거의 비슷합니다. update_comment_meta 함수를 이용해서 저장하면 됩니다.댓글이 신규 저장되는 시점의 훅은 comment_post입니다. 따라서 여기에 코멘트메타를 저장하는 로직을 넣으시면 되겠죠.댓글을 수정하는 로직을 또 만드셔야 하겠죠. 일단 모든 댓글에 수정 버튼이 있어야 할 것 같습니다. 수정 버튼을 누르면 수정 UI가 나와야겠죠. 이 때 비밀번호도 같이 입력할 수 있도록 나와야 할 겁니다.여기서 댓글을 수정하는 경우 비밀번호가 맞는지 비교를 해 봐야겠죠. 이 비교를 수행하는 타이밍은 wp_update_comment_data 훅이 좋을 것 같습니다. wp-includes/comment.php의 2565라인을 보시면 관련 코드가 있는데요. 아래와 같이 필터를 거친 다음에 WP_Error 객체인지를 검사합니다. 즉, 비밀번호가 맞지 않으면 WP_Error 객체의 인스턴스를 리턴해 주면 되는 거죠.$data = apply_filters( 'wp_update_comment_data', $data, $comment, $commentarr ); // Do not carry on on failure. if ( is_wp_error( $data ) ) { if ( $wp_error ) { return $data; } else { return false; } }댓글 삭제도 마찬가지 로직을 따르면 될 것 같습니다. trash_comment 훅을 사용하시면 될 것 같고요.생각만 한 거라 실제로 할 때는 시행착오가 있을 것이고 제가 말씀드린대로 바로 되지는 않을 겁니다. 그러니 시작 단계의 아이디어로 참고해 주세요.그럼 도움이 되었으면 좋겠습니다.좋은 질문해 주셔서 감사합니다.(블로그에 남겨 주신 문의도 확인했습니다. 고민을 좀 하고 플러그인도 찾아 보는 사이에 인프런에 질문을 남겨 주셔서 여기에서 답을 드립니다 ☺)
- 0
- 2
- 164
질문&답변
2024.05.22
phpstorm에서 LIve server 기능을 사용하는 방법이 궁금합니다.
안녕하세요. 질문 감사합니다.VSCode의 Live Server는 사용해 본 적이 없습니다만, 저는 일반적으로 웹 개발을 새로고침해 주는 BrowserSync를 사용합니다.npm install -g browser-sync로 브라우저 싱크를 글로벌로 설치한 뒤 아래 명령으로 서버를 돌리면 localhost:3000으로 접속할 수 있습니다.browser-sync start --proxy "bookstore.localhost" --files 'wp-content/themes/bookstore/**/*.php, wp-content/themes/bookstore/**/*.css, wp-content/themes/bookstore/**/*.js, !wp-content/themes/bookstore/vendor/**/*'보면 아시겠지만 --proxy에 로컬 접속 도메인을 적어 줍니다.--files에는 변경을 감지할 파일의 경로를 적어 줍니다. /**/은 0개 이상의 폴더를 뜻합니다. 또한 !를 적으면 해당 경로는 제외하라는 뜻입니다.더 자세한 내용은 BrowserSync 웹사이트에서 문서를 참고해 보시면 됩니다. 윈도우를 사용중이시라면 문서를 좀 참고해 보시긴 해야 할 겁니다.감사합니다.(AI 인턴의 답에서 spring-boot-devtools는 자바 스프링부트에 사용하는 툴이니 참고하지 않으시는 게 좋습니다.)
- 0
- 2
- 227