inflearn logo
강의

講義

知識共有

WordPressを正しく開発する - クライアント

ループ

wp_reset_postdata();

344

INFLEARINGMACHINE

投稿した質問数 1

0

new WP_Query를 통해서 새로운 $wp_query객체를 얻을 때, 글로벌 $post에도 변화가 있기 때문에 loop가 끝나고 나면 wp_reset_postdata()를 실행해주는 것으로 이해했는데, 맞다면 글로벌 $post에 어떤 변화가 일어나는 것인가요? 

 

wordpress loop php wp_query new

回答 1

1

mytory

안녕하세요. INFLEARINGMACHINE님.

주중에 제가 일이 많아서 답을 이제야 드리게 됐습니다.

사실 질문해 주신 부분에 대해서는 Loop 강의 다음다음 강의인 "Loop 내 주요 함수 뜯어 보기"에서 상세하게 다루고 있습니다. 그래서 아마도 의문이 해결되셨을 지도 모르겠습니다.

그래도 해결되지 않은 의문이 있다면 추가로 질문을 남겨 주시면 감사하겠습니다.

다만 한 가지 도움을 드릴 만한 것은 있는 것 같습니다.

"new WP_Query를 통해서 새로운 $wp_query객체를 얻을 때"라고 말씀해 주셨는데요, 워드프레스에서 변수 이름이 매우 중요하다는 점을 한 번 더 설명드릴 수 있을 것 같아요.

new WP_Query로 WP_Query 클래스의 새로운 인스턴스를 얻을 때 변수명을 $wp_query로 하는 것을 권장하지 않습니다. 원 페이지의 동작을 변경하게 되기 때문입니다.

예컨대 example.com/?p=1234 주소로 접속을 했다고 가정해 볼 게요. 그러면 1234번 포스트를 가져오게 됩니다. 이 동작은 $wp_query 라는 글로벌 인스턴스에 기록이 돼 있습니다.

그런데 이런 상황에서 $wp_query를 다른 조건으로 덮어쓰게 되면, 문제가 발생할 수 있습니다. 예컨대, 이전 포스트나 다음 포스트를 1234번 포스트 제목이 나오기 전에 표시를 하기 위해서 $wp_query = new WP_Query를 실행했다고 가정해 볼 게요. 그러면 문제가 발생하게 됩니다. 글로벌 변수인 $wp_query를 덮어썼기 때문입니다.

그래서 중요한 것은 새로운 $wp_query 객체를 얻으면 안 된다는 것이고, WP_Query의 새 인스턴스를 만들 때는 $wp_query라는 이름을 피하고 다른 이름을 지으시라는 것입니다. $my_query 같은 이름을 사용하라는 것이죠. 

wp_reset_postdata()는 이런 커스텀 이름의 WP_Query 클래스 객체를 사용한 뒤 실행해 주는 것입니다. 예컨대 $my_query에서 불러온 포스트를 글로벌 $post 변수에 할당하고 작업을 했다고 가정을 해 보죠. 그렇다면 작업이 끝난 뒤에는 다시 $wp_query의 맥락으로 돌아와야 할 거예요. 이 때 wp_reset_postdata()를 실행해서 $wp_query의 포스트를 글로벌 $post 변수로 되돌려 주는 작업을 하는 것입니다.

이게, 화면으로 보여 드리면 편한 것을 줄글로 쓰니까 어려운 점이 있네요. 혹시 의문이 다 해소되지 않았다면 어떤 부분이 추가로 궁금하신지 자세히 써 주시면 감사하겠습니다. 그러면 최대한 이해가 가도록 설명을 다시 한 번 드려 보겠습니다.

감사합니다.

 

뉴스페이퍼 싱글템플릿 디자인 관련 상담 요청

0

27

2

53강 레이아웃에서 css git 링크 관련 질문입니다.

0

35

2

폰트 업로드 단계에 설치해야할 플러그인이 현재 없습니다

0

49

2

FASTCOMET SSL 설정 방법 문의

0

54

2

banbu.kr 사이트 접속이 안됩니다.

0

56

2

엘리멘터

0

48

2

선생님 총체적 난국입니다..

0

73

2

wsl에서 폴더 열기 리눅스 드라이브가 보이지 않습니다.

0

66

1

도메인연결문의

0

56

2

도쿄서버 선택불가의 경우 대체 안을 알려주세요

0

56

2

강의가 오래됐는데 현시점에 원활한 진행이 가능할까요?

0

41

2

XML 불러오기 불가 (이미지만)

0

158

1

플러그인 개발에 대해서 궁금합니다

0

315

2

워드프레스 댓글 수정 삭제

0

377

2

single-book.php 파일은 워드프레스 기본 제공 파일인가요?

1

300

2

wp_enqueue_style 이동

0

292

2

강의변경

0

391

1

WP 전반적인 질문입니다.

0

447

1

xml 가져오기 불가

0

422

1

xdebug 3.2와 PHPStorm debug 연동

0

774

1

phpStorm에서 Cmd B 정의로 바로 점프하는게 안되요

0

242

1

어드민 강의 관련

0

385

1

query loop 관련 커스터마이징 질문

0

263

1

안녕하세요 첫 질문입니다

0

277

4