워드프레스 특정 태그 글 가져오기
특정 태그의 글을 가져오는 쇼트코드(shortcode)를 만들면서 알게 된 점을 정리합니다.
목차
쇼트코드란?
워드프레스 글과 페이지에 PHP 코드를 삽입할 수 있게 하는 것이 쇼트코드입니다. functions.php
파일에 정의해 놓고 테마 파일과 글, 페이지에 자유롭게 사용이 가능합니다. PHP를 이용하므로 내용이 계속 바뀌는 동적인 위젯을 만들기에 적합합니다.
워드프레스 글 혹은 페이지에 삽입할 때에는 [shortcode-name]
처럼, PHP 파일에 삽입할 때에는 echo do_shortcode('[shortcode-name]');
처럼 입력합니다. shortcode-name은 쇼트코드의 이름입니다.
완성한 코드
먼저 제가 짠 특정 태그의 글을 가져오는 쇼트코드를 올려 놓겠습니다.
function get_posts_by_tag($atts) {
$post_atts = shortcode_atts(array(
'posts' => 4,
'tag' => 'fx-350/570/991',
), $atts, 'get-posts-by-tag');
$html = '<div class="recentPosts">';
$posts = get_posts(array(
'numberposts' => $post_atts['posts'],
'tag' => $post_atts['tag'],
'post_status' => 'publish',
));
foreach( $posts as $post_item ) {
$html .= '<div><a href="'.get_permalink($post_item->ID).'">'.get_the_post_thumbnail($post_item->ID).'</a><a class="recentPostTitle" href="'.get_permalink($post_item->ID).'">'.$post_item->post_title.'</a></div>';
}
$html .= '</div>';
return $html;
}
add_shortcode('get-posts-by-tag', 'get_posts_by_tag');
코드 설명
$post_atts
에 쇼트코드의 매개변수(parameter)를 저장합니다. posts
는 불러올 글의 개수, tag
는 불러올 글의 태그(태그 이름 혹은 슬러그)입니다. 매개변수를 지정하지 않으면 기본적으로 posts
에는 4가, tag
에는 fx-350/570/991이 저장됩니다.
$html
에는 내보낼 html 내용을 작성합니다.
$posts
에는 앞서 받아온 매개변수를 토대로 블로그에서 글을 가져옵니다. get_posts
함수를 활용하였고, 이는 글 목록을 WP_Post Object로 가져옵니다. post_status
를 publish로 하는 것을 잊지 말아야 합니다. 그래야 발행된 글의 목록만 가져올 수 있습니다.
마지막으로 get_posts
로 받아온 글들의 썸네일과 URL, 제목을 foreach를 활용하여 하나하나 $html
에 저장합니다. get_permalink
나 get_the_post_thumbnail
은 ID를 받아 각각 URL과 썸네일을 불러옵니다.
그런 후 $html
의 div 태그를 닫고 내보내면 끝입니다.
코드 맨 끝에 있는 add_shortcode
함수는 특정 함수를 쇼트코드로 만들어 주는 함수입니다. 첫 번째 인수는 쇼트코드의 이름, 두 번째 인수는 쇼트코드를 만들 함수의 이름입니다.
쇼트코드 사용법
먼저 functions.php
파일에 위 코드를 복사하여 붙여넣습니다.
위 코드에서 만든 쇼트코드의 이름은 get-posts-by-tag입니다. 쇼트코드의 인자(매개변수)는 HTML에서 속성 입력하듯이 입력하면 됩니다. 따라서 [get-posts-by-tag posts=2 tag="TI-Nspire"]
라고 입력하면 태그가 TI-Nspire인 글 중 최신 글 2개를 가져옵니다. 태그 이름은 적절히 바꾸면 됩니다.
이 쇼트코드를 실행한 결과는 아래와 같습니다. 동적인 위젯이므로 제가 TI-Nspire 태그의 글을 새로 올린다면 아래 쇼트코드의 내용도 바뀝니다.
이 코드는 실제로 제 블로그의 메인 페이지에서 쓰이고 있습니다.
주의할 사항
제가 만든 다른 쇼트코드 중에는 최신 글을 가져오는 쇼트코드도 있습니다. 이 쇼트코드는 최신 글을 불러오는 데에 wp_get_recent_posts
함수를 사용합니다. 특정 조건에 부합하는 블로그의 글들을 가져올 수 있는 것은 위에서 사용한 get_posts
함수와 똑같지만 각 글의 제목, ID 등을 가져오는 방법이 다릅니다.
wp_get_recent_posts
는 연관 배열을 출력합니다. 예를 들어 각 포스트의 ID를 가져오려면 $post_item['ID']
처럼 작성해야 합니다.
이와 다르게 get_posts
는 WP_Post Object를 출력합니다. 예를 들어 각 포스트의 ID를 가져오려면 $post_item->ID
처럼 작성해야 합니다.
워드프레스에서 쇼트코드를 실행하지 않고 작성만 하려면 [[shortcode-name]]처럼 작성하면 됩니다. 물론 shortcode-name이 존재하는 쇼트코드일 때만 쓸 수 있습니다.