리디렉션이 포함 된 작업을 추가하려면 어떤 후크를 사용해야합니까?


16

동일한 페이지에 대한 새 쿼리 문자열을 작성하기 위해 쿼리 문자열에서 특정 URL 매개 변수를 가져 오는 플러그인을 만들고 싶습니다. 나는 훌륭한 Professional WordPress Plugin Development 책을 따르고 있지만이 작업에 어떤 후크를 사용할지 잘 모르겠습니다. 내 행동 함수는 다음과 같습니다.

add_action( 'init', 'tccl_redirect' );
function tccl_redirect() {
    header ( "Location: http://www.mysite.com/$mypage?$newparam=$newvalue" );
?>

헤더 리디렉션에 적합한 후크는 무엇입니까?


실제로 최종 URL 또는 WP_Query에 사용 된 변수 만 변경 하시겠습니까?
scribu

게시 한 코드는 기본적으로 모든 페이지를 리디렉션합니다. 원하는 것입니까? 이 리디렉션은 어떤 조건에서 발생해야합니까? 참고 : 어쨌든 카이저를 +1했습니다 template_redirect. 제 제안입니다.
t31os

scribu, 최종 URL과 쿼리 문자열을 변경하고 싶습니다.
jnthnclrk

t31os, 질문에 대한 코드를 단순화했습니다. 실제로는 더 많은 조건이 포함되어 있습니다.
jnthnclrk

결과는 어떻습니까? 솔루션 pls를 표시하십시오.
kaiser

답변:



17

나는 말할 template_redirect것이다. 그러나 Action Reference를 살펴보십시오 .

경로 exit()재 지정을 잊지 마십시오 .

/**
 * This example redirects everything to the index.php page
 * You can do the same for the dashboard with admin_url( '/' );
 * Or simply base the redirect on conditionals like 
 * is_*() functions, current_user_can( 'capability' ), globals, get_current_screen()...
 * 
 * @return void
 */
function wpse12535_redirect_sample() {

    exit( wp_redirect( home_url( '/' ) ) );

}

add_action( 'template_redirect', 'wpse12535_redirect_sample' );

8

그러나이 훅 template_redirect 가 다시 반복적으로 작동하면 끝없는 전달 이 있기 때문에 kaiser 의이 예제가 작동하지 않는다고 말할 것입니다 !

이미 홈페이지에 있다면 다음과 같이 확인하는 것이 좋습니다.

function wpse12535_redirect_sample() {

    $current_url = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    $site_url = get_bloginfo('siteurl') . "/";

    if($current_url != $site_url)       
      exit( wp_redirect( home_url( '/' ) ));    

}
add_action( 'template_redirect', 'wpse12535_redirect_sample');

나를 위해 잘 작동합니다. 어떤 제안? 문안 인사!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.