개요 | ||
본 글에서는 워드프레스가 우리가 지정한 테마를 보이게 하는 내부 절차를 파악해 본다.
설명. 워드프레스에서는 우리가 만든 테마를 어떤 내부 과정을 거쳐 보이게 하는지 궁금하다.
테마의 예로 http://igotit.tistory.com/85) 에서 만들었던 가장 간단한 테마를 보자.
위 주소에서 만들었던 테마는 style.css, index.php 파일 2개로 만든 초간단 테마였고, 테마의 index.php 에는 아래 처럼 달랑 text만 기록했었고(php코드도 아니고, html도 아님.),
이것이 웹에서 보일 때는 아래처럼 보였었다.
위 사이트를 보면서 -> 사이트의 루트로 접속했는데 왜 테마폴더의 index.php가 보이지? 이런 의문이 생긴다.( 물론 본 테마 뿐만이 아니라 다른 모든 테마에서도 마찬가지다. )
본 글에서는 우리가 지정한 테마를 보이게 하는 워드프레스 내부 절차를 파악해 본다.
| ||
1. 워드프레스가 테마의 템플릿(index.php) 을 보이는 과정. | |
앞에서 우리가 만든 테마가 웹에서 보이는 것을 보면서 생기는 첫번째 궁금함....
브라우저에서 사이트의 루트로 접속했는데, 왜 themes/igotitskeleton 폴더의 index.php 가 보이지?
웹서버에서 우리의 테마가 있는 폴더는 \wp\wp-content\themes\igotitskeleton 이고, index.php 파일이 있는 곳도 이 자리다.
워드프레스가 아닌 통상적인 웹사이트를 만드는 경우라면, 우리가 만든 index.php 를 웹에서 보이게 하는 경우 아래와 같은 주소로 접속해야 indx.php 가 보인다. (아래 주소 클릭해보면 위와 동일한 내용이 보임.)
http://igotit.kr/wp-content/themes/igotitskeleton/index.php
그런데, 워드프레스에서는 http://igotit.kr/theme-skeleton (<- 이 폴더는 워드프레스로 구축된 멀티사이트 이며 사이트의 루트에 해당함)
주소로 접속하면 우리가 만든 테마가 보인다. 이는 워드프레스의 어떤 설정 때문에 이렇게 보이는건가?
위 문제부터 이해하고 넘어가자. 즉 워드프레스가 우리가 선택한 테마의 템플릿인 index.php 를 연결하여 웹에보이게 하는 처리 과정이 무엇인가?
이 과정 및 기타 상세한 코드 흐름에 대한 설명문이 codex에서 제공되고 있다. 보기 -> http://codex.wordpress.org/User:DavidHouse/Wordpress_Code_Flow 주의사항 위 주소의 설명은 언제 현재의 워드프레스 버전 4.0 에서의 상황과 일치하지 않아서 혼선이 조금 생길 수 있다. 본 글의 설명은 워드프레스 4.0에서의 상황에 맞게 정리함.
위 글의 index.php 라는 부분에 바로 답이 나와있다. <- 여기서의 index.php 는 우리 테마의 index.php 가 아닌 워드프레스 설치된 루트에 있는 index.php 를 의미함.
질문 요점 : 워드프레스가 우리가 선택한 테마의 템플릿인 index.php 를 연결하여 웹에보이게 하는 처리 과정? 결론적인 답 : 워프프레스 루트에 있는 index.php(내부에서 최종호출되는 template_load.php) 가 처리함.
index.php 에서의 처리 과정을 조금 더 상세히 살펴보자.
워드프레스가 설치된 상태에서 브라우저로 접근하게 되면 제일 먼저 워드프레스의 index.php 가 실행된다. 아래 그림에 index.php 의 전체 내용보였다. 붉은 박스에 있는 define('WP_USE_THEME', true); 와 그 아래 파란색 박스부분의 코드가 전부이다.
define('WP_USE_THEME', true); 은 상수 WP_USE_THEME 를 true 로 설정하는것이다. 그냥 상수에 값을 할당하는 것일뿐 이것 자체가 특별한 기능없다. http://codex.wordpress.org/User:DavidHouse/Wordpress_Code_Flow 의 설명에서도 테마 리다이렉션 을 하게한다는 설명이 전부다. 아마 이후에 호출되는 php들에서 WP_USE_THEME 값에 따른 처리가 이뤄지겠구나 라고 생각하면 된다. 어디서 테마로 연결시키는지 계속 추적해보자.
require( dirname( __FILE__ ) . '/wp-blog-header.php' ); 워드프레스의 index.php 의 기능은 wp-blog-header.php 를 실행시키는 것이 전부이며, wp-blog-header.php 파일은 워드프레스 설치된 루트에 있다. codex의 설명에서도( http://codex.wordpress.org/User:DavidHouse/Wordpress_Code_Flow#wp-blog-header.php ) wp-blog-header.php(그리고 이 파일속에서 인클루드된 파일들) 가 모든 처리를 다하고 있다고 설명하고 있다. 모든 처리란 아래와 같다.
1. reauest 를 이해하고, (리퀘스트란 브라우저로 접속할 때 주소창에 기록된 주소라고 생각하면됨.) 2. 데이터베이스로부터 해당하는 포스트를 가져오고, 3. 현재활성화된 테마에 따라 표현한다. 4. 그리고 브라우저에서표현되는것 말고도 많은 로레벨 처리가 이뤄진다. 예 HTTP 헤더를 내보내는 등.
wp-blog-header.php 이 파일의 내용을 보면 아래그림과 같다.
3개의 처리가 전부다. 1. wp-load.php 를 실행하고, 2. wp() 실행하고, 3. template-loader.php 를 실행한다.
wp-load.php wp-load.php 내부적으로 wp-config. setup-config.php 이 인클루드되고 있다. wp-config.php 파일속에는 username, password, database접속정보등이 있다. wp-config.php 내부에서는 wp-setting.php 를 인클루드 하고 있는데, 이 파일에서는 워드프레스 설치된 폴더 wp/wp-includes/ 속의 거의 모든 php 파일들을 포함시키고 있고, 주요 클래스 인스턴스 생성시킨다.
wp(); wp-blog-header.php 내에서 wp-load.php 다음에 실행되는 wp();에서는 요청(브라우저로 요청된 주소등)된 상황에 맞게, 데이터베이스에서 정보를 가져오는 처리를 수행하고 이를 워드프레스 전역변수에 저장해두는 처리. <- 즉, 이 단계 이후 해당 전역변수의 값을 활용 가능함. 활용이라 함은 템플릿에서 전역변수의 값을 웹에 표현하는 것이 대부분임.
template-loader.php template (php파일) 을 로딩처리 하는 기능을 담당한다. 어떤 template 파일을 로딩 할지는 앞단의 wp() 처리과정에서 확보된 정보를 이용함.
테마폴더의 index.php가 로딩 될려면 template-loader.php 내에서 테마의 index.php 를 열기하는 처리가 있어야 할 것이다.
template-loader.php 파일을 열어보면, 아래 그림과 같이 가장 앞부분에 파란색 조건문에 WP_USE_THEME 가 정의되어있고, 그 값이 true 이면 빨간박스가 실행되게 되어있는데, 이 부분이 우리가 선택한 테마가 보여지도록 하는 처리가 이뤄지게 한다.
do_action( 'template_redirect' );
do_action 함수에 대한 codex의 설명 보기 -> http://codex.wordpress.org/Function_Reference/do_action
template_redirect 에 대한 codex의 설명 보기 -> http://codex.wordpress.org/Plugin_API/Action_Reference/template_redirect
정리.
워드프레스에서 우리의 테마가 보이게 되는 과정은 워드프레스의 기본 index.php 가 실행 -> wp-blog-head.php -> wp_load.php -> wp(); -> template_load.php 의 절차로 진행되면서 마지막 단계 template_load.php 단계에서 우리가 지정한 테마의 템플릿을 로드하는 처리를 수행함.
| |
끝. 1. 워드프레스가 테마의 템플릿(index.php) 을 보이는 과정. |
본 글이 포함된 통합 정리 글
WordPress 활용정보 정리 : http://igotit.tistory.com/23
|
121.
'지속가능티끌 > 웹,워드프레스' 카테고리의 다른 글
워드프레스 테마 만들기 2편. index.php 수정하고 템플릿 추가하기. (0) | 2014.10.21 |
---|---|
워드프레스 웹페이지 구조와 구성요소인 템플릿 파일 이해하기. (0) | 2014.10.21 |
WooCommerce Multilingual 플러그인 설치하기. 다국어 플러그인 WPML 환경에서 우커머스 사용시 (0) | 2014.10.19 |
워드프레스 우커머스 설치, 둘러보기. (0) | 2014.10.19 |
워드프레스 bbPress 설치, 기본사용법. (0) | 2014.10.19 |
댓글