워드프레스 소스상에서 rediect 방법

$url = $_SERVER[‘REQUEST_URI’];
//echo $url;

if ($url == ‘/financial-services/’) {
echo “<script>
window.location.replace(‘http://test.com/abc/’);
</script>”;
}

 

위 소스처럼 넘기는방법은 여러가지 입니다.  해당 theme 밑 functions.php 파일에서 했으며

header(“Location: http://test.com/abc/);  -> 첫째로 페이지 넘기는 방법 중이건 왜 안되는지 궁금합니다. meta 태크 script 다 되는데,

그리고 두번째 질문으로는 미디어 파일은 http://test.com/abc/abc.pdf 이런 url 은 위 같은 소스로 아무리 해봐도 꿈쩍도 하지 않습니다. 왜 그런건가요? 크롬에서는 pdf 파일이 열려서 보이고 익스플로러는 “http://test.com/abc/abc.pdf” url 열면 브라우저는 그대로 이고 pdf 파일이 다운로드 되어지고요

 

http://test.com/abc/abc.pdf 이런 PDF 미디어 파일  url 을 redirect 시키려면 어떻게 해야 하나요?

 

그리고 세번째

wp_redirect 이 함수를 쓰려면 어떻게 해야 하나요?

해당 theme 밑 functions.php 파일에서 해야 하는건가요? 사용법도 알려주세요

목록보기

해당 글에 6개의 댓글이 있습니다.

  1. 피터 댓글:

    functions.php에서 위 코드를 추가했단 말씀이신가요?
    위 방법은 다음 두 가지 측면에서 절대로 해서는 안될 방법입니다.
    첫째, functions.php 파일에 실제 코드를 그대로 적어 넣으면 파일이 로딩되는 시점에서 바로 html 출력으로 나가게 됩니다.
    브라우저의 오류 보정 기능때문에 정상 동작하는 것 처럼 보일 수 있지만, 실제 html 소스를 보면(요소검사 아님) html 태그가 시작되기도 전에 script 태그가 나오는, 잘못된 문서가 나오게 됩니다.
    이 경우, 페이지는 정상적으로 보일지라도 ajax 호출은 오류가 발생하게 됩니다. 위 코드의 경우 주소 조건이 일치하지 않아 오류가 없겠지만, 이런 식으로 functions.php 파일에 html 출력자체를 발생하게 하는 방법은 지양해야할 방법입니다.

    둘째, 요청된 주소를 파싱하여 redirect 여부를 결정하는 것은 사이트를 운영해가는데 있어서 동적인 수정사항에 반응할 수 없습니다.
    예를 들어, 위 코드의 경우 워드프레스의 고유주소를 변경하면 동작하지 않게 됩니다.
    그리고, header 함수를 이용한 방법은 맞지는 않지만 이동되어야 하는데 이상하네요.
    아마 다른 오류가 있었던게 아닌가 싶네요.

  2. 피터 댓글:

    미디어파일을 링크하여 클릭 시 행동에 대해서는 브라우저의 설정에 따라 다릅니다.
    정확하게 얘기하자면 브라우저마다 미디어의 mime type별로 수행할 동작을 지정해 줄 수 있습니다.
    아래는 파이어폭스의 경우 관련 도움말 입니다.
    https://support.mozilla.org/en-US/kb/change-firefox-behavior-when-open-file

    만약, 강제로 다운로드하게 하시려면, 이 mime type을 브라우저가 파일 다운로드라고 인식할 수 있게 해주어야 합니다.
    아래 링크 참조하셔서 파일을 작성하시고,
    https://coderwall.com/p/qa0yka/simple-php-force-download-for-any-mime-type
    실제 url 부분에는 작성한 파일을 가리키도록 하시면 됩니다.
    보통은 파라메터로 넘겨서 파일을 특정할 수 있도록 해줍니다.

    html 5 에서 추가된 항목으로 링크 시 download 여부를 지정할 수 있으나, cross browsing이 완벽하게 적용되지 않아 저희는 잘 사용하지 않습니다.
    https://www.w3schools.com/tags/att_a_download.asp

  3. 피터 댓글:

    wp_redirect()가 바로 문의하신 header함수를 사용하여 페이지를 redirect 합니다.
    http 프로토콜의 header를 조작하는 함수이기 때문에 워드프레스가 header 출력을 하기 전에 수행해야 합니다.
    ( 이후 시점에서 수행 시 PHP warning이 발생하며 아무런 동작도 수행하지 않습니다. )
    워드프레스가 내보내는 header패킷을 조작할 수 있는 필터가 제공되고 있긴 하지만( wp_headers ),
    이 시점에는 요청이 해석되지 않은 시점이기 때문에, 어떤 페이지를 요청하는지 알 수 없습니다.
    따라서 의도하신 목적은 보통 template_redirect 액션에서 수행합니다.

  4. 피터 댓글:

    위 모든 사항을 고려하여 redirection 기능을 구현하고자 한다면, functions.php에 아래의 코드를 추가 후
    function redirect_test() {
    $redirect = get_post_meta( get_the_ID(), ‘redirect’, true );
    if( $redirect ) {
    wp_redirect( $redirect );
    exit();
    }
    }
    add_action( ‘template_redirect’, ‘redirect_test’ );

    redirection을 수행하고자 하는 특정 페이지, 또는 글에서 사용자 정의 필드에
    redirect라는 이름으로 값을 추가해 주면, 고유주소 형태나 글의 제목이나 슬러그의 값에 영향을 받지 않고 원하시는 동작을 수행할 수 있습니다.

  5. caesar 댓글:

    답변 정말 감사합니다.

  6. caesar 댓글:

    답변 정말 감사합니다. ^^

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다