본문 바로가기

웹개발/워드프레스

워드프레스 URL에 사용자변수 추가하기 get_query_var



워드프레스의 페이지에 사용자 변수를 추가하는 방법을 설명해 드립니다.

Permalink setting이 Default로 되어 있다면, 페이지 화면에서 아래의 주소가 보일 겁니다.

 http://yourwordpress.com/?page_id=87 


여기에 mode라는 변수를 넣어서 페이지에서 감지를 하고 싶어서 

"&mode=write&article=jinnovator-parameter-test" 를 붙여 보았습니다.


주소 : 

 http://localhost/wordpress/?page_id=87&mode=write&article=jinnovator-parameter-test


하지만, get_query_var( 'mode' ) 함수에서 해당 값을 불러오지를 못하네요.

$_GET을 사용하면 가져올 수 있지만, 워드프레스 코어에서 제공하는 기능을 충실히 활용하기 위해 get_query_var('') 함수에서 가져올 수 있도록 해야 합니다.

먼저, public query var 목록을 살펴보고, 중복되지 않는 파라미터명을 선정해야겠죠?


코드 : 

global $wp_query;

print_r( $wp_query->query_vars); 


결과값 : 

Array ( [page_id] => 87 [error] => [m] => [p] => 87 [post_parent] => [subpost] => [subpost_id] => [attachment] => [attachment_id] => 0 [name] => [static] => [pagename] => [second] => [minute] => [hour] => [day] => 0 [monthnum] => 0 [year] => 0 [w] => 0 [category_name] => [tag] => [cat] => [tag_id] => [author] => [author_name] => [feed] => [tb] => [paged] => 0 [comments_popup] => [meta_key] => [meta_value] => [preview] => [s] => [sentence] => [fields] => [menu_order] => [category__in] => Array ( ) [category__not_in] => Array ( ) [category__and] => Array ( ) [post__in] => Array ( ) [post__not_in] => Array ( ) [tag__in] => Array ( ) [tag__not_in] => Array ( ) [tag__and] => Array ( ) [tag_slug__in] => Array ( ) [tag_slug__and] => Array ( ) [post_parent__in] => Array ( ) [post_parent__not_in] => Array ( ) [author__in] => Array ( ) [author__not_in] => Array ( ) [ignore_sticky_posts] => [suppress_filters] => [cache_results] => 1 [update_post_term_cache] => 1 [update_post_meta_cache] => 1 [post_type] => [posts_per_page] => 10 [nopaging] => [comments_per_page] => 50 [no_found_rows] => [order] => DESC ) 


사용하고자 하는 "mode"라는 파라미터를 사용 하고 있지 않네요. 

물론, URL에 넣은 mode라는 파라미터도 가져오지 못했습니다.

이제, 워드프레스의 코어 함수에서 가져올 수 있도록 파라미터를 추가해보겠습니다.


"mode"와 "article"이라는 파라미터를 추가해 보겠습니다.


아래의 코드를 테마의 경우 functions.php 에 넣어주세요. 플러그인의 경우 호출되는 코드의 적절한 위치에 넣어 주시면 됩니다. 함수의 인자는 add_filter에서 알아서 넣기 때문에, 받은 배열에 값을 추가하고 그대로 돌려준다고 생각하시면 됩니다.

function my_add_query_vars($myVars) {

  $myVars[] = "mode";

  $myVars[] = "article";

  return $myVars;

}

add_filter('query_vars', 'my_add_query_vars'); 


여기서 다시 query_vars를 찍어 볼까요?


주소 : 

http://yourwordpress.com/?page_id=87&mode=write&article=jinnovator-parameter-test 


코드 : 

global $wp_query;

print_r( $wp_query->query_vars); 


결과값: 

Array ( [page_id] => 87 [mode] => write [article] => jinnovator-parameter-test [error] => [m] => [p] => 87 [post_parent] => [subpost] => [subpost_id] => [attachment] => [attachment_id] => 0 [name] => [static] => [pagename] => [second] => [minute] => [hour] => [day] => 0 [monthnum] => 0 [year] => 0 [w] => 0 [category_name] => [tag] => [cat] => [tag_id] => [author] => [author_name] => [feed] => [tb] => [paged] => 0 [comments_popup] => [meta_key] => [meta_value] => [preview] => [s] => [sentence] => [fields] => [menu_order] => [category__in] => Array ( ) [category__not_in] => Array ( ) [category__and] => Array ( ) [post__in] => Array ( ) [post__not_in] => Array ( ) [tag__in] => Array ( ) [tag__not_in] => Array ( ) [tag__and] => Array ( ) [tag_slug__in] => Array ( ) [tag_slug__and] => Array ( ) [post_parent__in] => Array ( ) [post_parent__not_in] => Array ( ) [author__in] => Array ( ) [author__not_in] => Array ( ) [ignore_sticky_posts] => [suppress_filters] => [cache_results] => 1 [update_post_term_cache] => 1 [update_post_meta_cache] => 1 [post_type] => [posts_per_page] => 10 [nopaging] => [comments_per_page] => 50 [no_found_rows] => [order] => DESC )  



잘 들어갔군요. 이제 테마나 플러그인 개발 시, 워드프레스 코어 함수인 get_query_var( '파라미터명' ) 을 사용하여 값을 가져 오시면 됩니다.