특정 포스트 포맷의 기사 표시하기

Twitter의 트윗과 같이 본문이 짧은 기사의 종류를 ‘status’라는 포스트 포맷으로 지정할 수 있다. 따라서 status로 지정한 기사를 사이드바에 작은 박스로 표시한다.

  1. 포스트 포맷이란
    포스트 포맷             가이드라인
    aside             짧은 기사(페이스북의 notes와 같은 것)  제목을 생략해서 표시
    gallery            갤러리를 표시한 기사
    link                 링크가 메인인 기사
    image            1장의 이미지가 메인인 기사
    quote             인용이 메인인 기사
    status             짧은 기사(Twitter의 트윗과 같은 것) 제목을 생략해서 표시
    video              비디오가 메인인 기사
    audio             오디오가 메인인 기사
    chat                채팅 기록을 정리한 기사
    aside와 status는 모두 짧은 기사를 나타내는 포스트 포맷이다. aside가 1~2단락 정도의 문장을 나타내고, status는 트위터의 트윗과 같이 140문자 정도의 문장을 나타낸다.
  2. 포스트 포맷 기능 활성화하기
  3. 포스트 포맷을 지정해서 기사 작성하기
  4. 톱페이지의 표시 확인하기
  5. 사이드바에 루프 추가하기
  6. status 기사만 출력하기
  7. 기사의 본문과 작성 일자만 출력하기
  8. status 제목 붙이기
  9. 스타일시트로 디자인하기
  10. 최신 기사 목록에서 status 기사 삭제하기(1)
  11. 최신 기사 목록에서 status 기사 삭제하기(2)
  12. status 기사 추가해보기
    style.css에 설정을 추가해서 status 기사의 디자인을 사용자정의로 설정한다. 여기에서는 제목을 검은회색으로, 전체를 선으로 장식한다. 이제 status 기사의 출력 부분에 대한 설정이 끝났다.

포스트 포맷의 기능 활성화하기

function.php

<?php

(생략)

//포스트 포맷
add_theme_support(‘post-formats’, array(‘status’));

?>

->

->MEMO

복수의 포스트 포맷을 활성화하는 경우 포스트 포맷 이름을 콤마(,)로 구분해서 지정한다. 예를 들어 ‘status’와 ‘video’를 활성화하기 위해서는 array( ‘status’, ‘video’)라고 지정한다.

sidebar.php

사이드바에 루프 추가하기

<!– 사이드바 –>
<div id=”sidebar”><ul><li id=”status” class=”widget”><h2>STATUS</h2>
<ul>

<?php query_posts(); ?>
<?php if(have_posts()): while(have_posts()):
the_post(); ?>
<li>
<?php echo get_the_content(); ?> <span><?php echo get_the_date(‘n월 j일 A h:i’); ?></span>
</li>
<?php endwhile; endif; ?>

</ul>
</li>

<?php dynamic_sidebar(); ?>
</ul>

</div>

status 기사만 출력하기

<?php query_posts(); ?>의 tax_query 파라미터로 출력하는 기사의 포스트 포맷을 지정해서 status의 기사만 출력한다. 단, tax_query 파라미터를 이용하는 경우 파라미터의 지정은 PHP의 배열형식 array(~)를 사용해서 입력한다. 여기서는 <?php $myquery_status = array(~); ?>로 파라미터를 지정한다.
어떤 포스트 포맷의 기사를 출력할 것인지는 tax_query 파라미터 내의 terms 파라미터로 지정한다. status의 기사를 출력하는 경우 값은 post-format-status로 지정한다.

<!– 사이드바 –>
<div id=”sidebar”><ul><li id=”status” class=”widget”><h2>STATUS</h2>
<ul>

<?php $myquery_status = array(
‘tax_query’ => array(array(
‘taxonomy’ => ‘post_format’,
‘field’ => ‘slug’,
‘terms’ => ‘post-format-status’
))
); ?>

<?php query_posts($myquery_status); ?>
<?php if(have_posts()): while(have_posts()):
the_post(); ?>
<li>
<?php echo get_the_content(); ?> <span><?php echo get_the_date(‘n월 j일 A h:i’); ?></span>
</li>
<?php endwhile; endif; ?>
</ul>
</li>

<?php dynamic_sidebar(); ?>
</ul>

</div>

->MEMO

tax-query 파라미터 내의 terms 파라미터에서는 포스트 포맷의 영어 이름으로 post-format-을 붙여서 값을 지정한다. 예를 들어 video인 기사를 출력하는 경우 post-format-video라도 지정한다.

기사의 본문과 작성 일시만 출력하기

변경 전

<?php query_posts($myquery_status); ?>
<?php if(have_posts()): while(have_posts()):
the_post(); ?>
<?php echo get_the_template_part(‘content’,’excerpt’); ?>
<?php endwhile; endif; ?>
</ul>
</li><?php dynamic_sidebar(); ?>
</ul></div>

변경 후

<?php query_posts($myquery_status); ?>
<?php if(have_posts()): while(have_posts()):
the_post(); ?>
<li>
<?php echo get_the_content(); ?> <span><?php echo get_the_date(‘n월 j일 A h:i’); ?></span>
</li>

<?php endwhile; endif; ?>
</ul>
</li><?php dynamic_sidebar(); ?>
</ul></div>

->MEMO

여기에서는 본문을 <p>로 자동으로 마크업하지 않고 출력하기 위해 <?php the_content(); ?>가 아닌 <?php echo get_the_content(); ?>를 사용한다. 또한 작성일시는 <?php echo get_the_date(); ?>의 파라미터에서 월일과 시간을 출력하도록 지정한다.

STATUS 제목 붙이기

<!– 사이드바 –>

<div id=”sidebar”>

<ul>

<li id=”status” class=”widget”><h2>STATUS</h2>
<ul>

<?php $myquery_status = array(
‘tax_query’ => array(array(
‘taxonomy’ => ‘post_format’,
‘field’ => ‘slug’,
‘terms’ => ‘post-format-status’
))
); ?>
<?php query_posts($myquery_status); ?>
<?php if(have_posts()): while(have_posts()):
the_post(); ?>
<li>
<?php echo get_the_content(); ?> <span><?php echo get_the_date(‘n월 j일 A h:i’); ?></span>
</li>
<?php endwhile; endif; ?>
</ul>
</li>

<?php dynamic_sidebar(); ?>
</ul>

</div>

STATUS라는 제목을 붙여서 포스트 포맷이 status의 기사인 것을 알게 한다. 이때 사이드바에 표시한 다른 메뉴와 같은 형식으로 마크업해서 다음 장에서 위젯으로 등록할 수 있게 한다. 또한 <li>의 id 속성은 status로 지정해서, 스타일시트에서 디자인을 사용자정의로 지정할 수 있게 한다.

home.php

최신 기사 목록에서 status 기사 삭제하기(1)

이번에는 최신 기사의 목록에 status의 기사를 출력하지 않도록 지정한다. 이 경우에도 <?php query_posts(); ?>의 tax_query 파라미터를 사용하지만, 이렇게 지정하기 위해서는 파라미터의 지정을 배열 형식으로 입력해야 한다. 따라서 먼저 기존 파라미터를 배열 형식으로 수정한다.
여기에서는 썸네일 이미지와 요약문을 출력하는 루프의 파라미터를 <?php $myquery_recent01 = array(); ?>로 지정하고 제목만을 출력하는 루프의 파라미터를 <?php $myquery_recent02 = array(); ?>로 지정한다. 파라미터의 설정은 변경되지 않았기 때문에 표시 화면은 변하지 않는다.
변경 전

(생략)
<p class=”title”>RECENT POSTS</p>
<?php query_posts(‘posts_per_page=2&ignore_sticky_posts=1’); ?>
<?php if(have_posts()): while(have_posts()):
the_post(); ?>
<?php get_template_part(‘content’,’excerpt’); ?>
<?php endwhile; endif; ?>

<ul class=”toplist”>
<?php query_posts(‘posts_per_page=8&offset=2&ignore_sticky_posts=1’); ?>
<?php if(have_posts()): while(have_posts()):
the_post(); ?>
<?php get_template_part(‘content’,’title’); ?>
<?php endwhile; endif; ?>
</ul>

</div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

변경 후

(생략)
<p class=”title”>RECENT POSTS</p>

<?php $myquery_recent01 = array(
‘posts_per_page’ => 2,
‘ignore_sticky_posts’ => 1
); ?>

<?php query_posts($myquery_recent01); ?>
<?php if(have_posts()): while(have_posts()):
the_post(); ?>
<?php get_template_part(‘content’,’excerpt’); ?>
<?php endwhile; endif; ?>

<ul class=”toplist”>
<?php $myquery_recent02 = array(
‘posts_per_page’ => 8,
‘offset’ => 2,
‘ignore_sticky_posts’ => 1
); ?>

<?php query_posts($myquery_recent02); ?>
<?php if(have_posts()): while(have_posts()):
the_post(); ?>
<?php get_template_part(‘content’,’title’); ?>
<?php endwhile; endif; ?>
</ul>

</div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

최신 기사 목록에서 status 기사 삭제하기(2)

tax_query 파라미터의 지정을 추가해서 포스트 포맷이 ‘status’인 기사를 출력하지 않도록 한다. 기본적인 지정은 앞에서와 같지만 출력을 금지하는 경우 operator 파라미터를 추가하고 값을 ‘NOT IN’이라고 지정한다.

(생략)
<p class=”title”>RECENT POSTS</p>

<?php $myquery_recent01 = array(
‘posts_per_page’ => 2,
‘ignore_sticky_posts’ => 1,
‘tax_query’ => array(array(
‘taxonomy’ => ‘post_format’,
‘field’ => ‘slug’,
‘terms’ => ‘post-format-status’,
‘operator’ => ‘NOT IN’
))

); ?>
<?php query_posts($myquery_recent01); ?>
<?php if(have_posts()): while(have_posts()):
the_post(); ?>
<?php get_template_part(‘content’,’excerpt’); ?>
<?php endwhile; endif; ?>

<ul class=”toplist”>
<?php $myquery_recent02 = array(
‘posts_per_page’ => 8,
‘offset’ => 2,
‘ignore_sticky_posts’ => 1,
‘tax_query’ => array(array(
‘taxonomy’ => ‘post_format’,
‘field’ => ‘slug’,
‘terms’ => ‘post-format-status’,
‘operator’ => ‘NOT IN’
))

); ?>
<?php query_posts($myquery_recent02); ?>
<?php if(have_posts()): while(have_posts()):
the_post(); ?>
<?php get_template_part(‘content’,’title’); ?>
<?php endwhile; endif; ?>
</ul>

</div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

“특정 포스트 포맷의 기사 표시하기”에 대한 한개의 댓글

답글 남기기