[워드프레스] 랜덤 포스트로 이동하는 링크를 만드는 방법

folder 프로그래밍 calendar_month web_traffic 3

워드프레스로 사이트를 만들면서 개발을 위해서든, 사용자를 위해서든 랜덤 페이지로 이동하는 링크를 만들어야 할 때가 있어서 어떻게 하면 좋을까 고민해보다가 만든 두 가지 방법을 기록으로 남겨봅니다.

두 가지 방법 모두 워드프레스 내장 함수인 get_posts 로 무작위 포스트를 불러오는 것은 맞는데, 그 표현 방법이 조금 다르다고 생각해주시면 됩니다.

일단 아래 코드를 봅시다.

<?
    $args = [
        'numberposts' => 1,
        'post_type' => 'post',
        'orderby' => 'rand',
    ];
    $randompost = get_posts( $args );
?>
<a href="<? echo esc_url( get_permalink( $randompost[0] ) ); ?>">Go to Random post</a>

위 코드를 찬찬히 살펴 보자면, get_posts 함수로 어떤 포스트를 불러 올 것인데 post_typepost 로 지정하고, 한 개만 불러오면 되기 때문에 numberposts 를 1로 지정했습니다.

그리고 가장 중요한 부분인 정렬 순서(orderby)를 rand 로 지정해서 랜덤 포스트를 불러오도록 합니다.

참고로 get_posts 는 포스트 목록을 배열로 반환하기 때문에, 링크를 가져올 때(get_permalink) $randompost 배열의 첫 번째 값([0])으로 투입해줍니다.

나머지는 a 태그를 이용해 링크로 만들어 주면 됩니다. 간단하죠?

그런데 이 방법은 뭔가.. 특정 페이지가 로드 되면서 이미 랜덤 포스트로 이동하는 링크가 사전적으로 결정되다 보니 임의성이 부족한 듯한 느낌이 들어 별로였습니다.

랜덤 포스트로 리다이렉트 하기

그래서 아래와 같이 다른 방법을 구현 해보았습니다.

아래 방법은 random.php 로 이동하는 링크를 만들어 두고, 사용자가 링크를 타고 random.php 로 이동하면 해당 페이지에서 무작위로 정해진 페이지로 사용자를 리다이렉트 하도록 구현한 것입니다.

일단 링크는 아래와 같습니다.

<a href="{도메인}/random.php">Go to Random post</a>

위 링크를 누르면 사용자는 random.php 페이지로 이동하게 되겠죠?

이제 본인이 관리하는 웹사이트의 최상위 디렉토리에 random.php 파일을 직접 만들어 두고, 그 파일의 내용을 아래와 같이 구성합니다.

<?
    define( 'SHORTINIT', false );
    require( 'wp-load.php' );

    $args = [
        'numberposts' => 1,
        'post_type' => 'post',
        'orderby' => 'rand',
    ];
    $randompost = get_posts( $args );

    wp_redirect( get_permalink( $randompost[0] ) );
?>

하나씩 조금 자세히 보자면,

  1. random.php 파일에서 워드프레스 내장 함수를 사용하기 위해 definerequire 를 통해 리소르를 로드 함
  2. get_posts 함수를 이용해 랜덤 포스트 조회
  3. wp_redirect 를 사용해 사용자를 무작위로 추출된 포스트로 이동 시킴

이렇게 보시면 되겠습니다.

이 방법은 사용자가 random.php 파일에 접속했다는 것을 눈치채지 못 할 정도로 빠르게 작동하며, 사용자가 링크를 클릭 했을 때 어떤 페이지로 이동하게 될 지 사전에 알 수 없기 때문에 첫 번째 방법에서 마음에 들지 않았던 임의성 문제 또한 해결할 수 있습니다.


더 좋은 방법이 있다면 많은 분들에게 공유하기 위해 코멘트를 통해 알려주세요.

끝.

댓글 남기기