계산기와 리코더

워드프레스 특정 태그 글 가져오기

특정 태그의 글을 가져오는 쇼트코드(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_permalinkget_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이 존재하는 쇼트코드일 때만 쓸 수 있습니다.

BINUBALL
작성자: BINUBALL
공학용 계산기와 리코더에 관심이 많은 사람입니다. 현재는 fx-570ES PLUS, fx-570EX, fx-9860G3 등의 계산기 사용법을 주로 올리고 있습니다. 자세한 내용은 프로필을 참고하시길 바랍니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다