show posts randomly on home page in wordpress

워드프레스 메인 페이지(홈 페이지)에서 글 정렬 변경하기

워드프레스 메인 페이지(홈 페이지)에서 글 정렬 순서를 변경하고 싶은 경우가 있을 수 있습니다. 예를 들어, 보통 전면 페이지에는 글이 최근 글에서 오래된 글순으로 표시됩니다. 이를 경우 오래된 글은 방문자가 읽을 기회가 줄어들 수 있습니다. 이런 경우에 정렬 순서를 랜덤(임의)하게 변경하는 것을 고려해볼 수 있습니다. 또는, 글 타이틀을 기준으로 정렬하는 것도 생각해볼 수 있을 것입니다.

이와 같은 상황에서 사용할 수 있는 후크가 pre_get_posts입니다. pre_get_posts에 대한 자세한 내용은 여기에서 확인해볼 수 있습니다. 메인 페이지의 글 순서를 랜덤하게 표시하려면 다음 코드를 사용 중인 함수 파일(functions.php)에 추가하면 됩니다.

add_action( 'pre_get_posts', 'random_posts' );

function random_posts( $query ) {
if ( $query->is_home() && !$query->is_paged() && $query->is_main_query() ) {
$query->set( 'orderby', 'rand' );
}
}
// Reference

위의 코드를 적용하면 홈페이지의 첫 페이지에만 글을 램덤하게 표시될 것입니다. 위의 코드를 함수 파일(functions.php)에 추가하는 방법은 여기를 참고해보시기 바랍니다. 참고로 전면 페이지에도 적용하려면 이론상 $query->is_home() 부분을 ($query->is_home() || $query->is_front_page())와 같이 바꾸어주면 될 것 같습니다.

루프 내에서 Query를 사용할 경우 WordPress Codex 문서를 참고하시기 바랍니다. 참고로 orderorderby의 차이점은 여기에서 확인해볼 수 있습니다. orderorderby 파라미터를 오름차순(ascending) 또는 내림차순(descending)으로 정렬할 것인지를 지정합니다. 기본값은 ‘DESC’입니다. orderby는 끌어오는 글을 어떤 파라미터 기준으로 정렬할 것인지를 지정하며, 기본값은 ‘date (post_date)’입니다. 예제:

$args = array(
'orderby' => 'title', // 글 제목 기준으로 정렬
'order'   => 'DESC', // 내림차순
);
$query = new WP_Query( $args );

워드프레스 메인 페이지(전면 페이지)에서 특정 카테고리 글을 제외하는 방법이 여기에 설명되어 있습니다. 이러한 내용과 pre_get_posts Codex 페이지의 내용을 응용하면 많은 경우 테마 소스를 수정하지 않고 글 표시 방법을 변경할 수 있을 것입니다.



기부를 통해 이 블로그를 후원하실 수 있습니다.
워드프레스 설치/제작/문제해결이 필요한 경우 서비스(유료)를 요청해주세요.