wp_redirect ()-이미 보낸 헤더


10

wp_redirect()페이지에서 가입 양식을 성공적으로 제출 한 후 사용자를 리디렉션 하는 데 사용하려고 합니다.

작동하지 않고 다음 오류가 표시됩니다.

경고 : 헤더 정보를 수정할 수 없습니다. / Applications / MAMP / htdocs / theme / wp-에서 이미 보낸 헤더 (/Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10에서 출력 된 헤더) 1178 행에 포함 /pluggable.php

나는 이전에 이미 출력되어 왔음을 이해하지만 그것이 작동하지 않는 이유는 있지만이 작업을 수행하는 방법에 대한 실마리는 없습니다.

가입 양식은 함수에 의해 렌더링되고 내 functions.php 내의 다른 함수에 의해 제출됩니다.

if ( isset( $_POST['subscribe'] ) ) {
    // Submits the form and should then redirect
    wp_redirect("/thank-you/");
    exit;
}

그런 다음 두 기능 모두 가입 양식을 표시하려는 경우에 사용됩니다.

나는 그것이 최선의 방법이 아니라는 것을 두려워합니다. 나는 그 일을하는 행동을 만들어야하지만 그것을 어떻게 구현할 지 모른다. 찾은 대부분의 자습서는 결과를 동일한 페이지에 직접 표시하며 추가 리디렉션이 필요하지 않습니다. 어쩌면 이것이 함수 내에서 함수로 작업하는 이유 일 것입니다.

답변:


16

답을 찾을 수 (통해)

이 함수를 사용하는 대신 "wp_loaded"에 동작을 추가하여 헤더를 보내기 전에로드되도록합니다.

<?php
add_action ('wp_loaded', 'my_custom_redirect');
function my_custom_redirect() {
    if ( isset( $_POST['subscribe'] ) ) {
        $redirect = 'http://example.com/redirect-example-url.html';
        wp_redirect($redirect);
        exit;
    }
}     
?>

오류를 제거했지만 게시물이 저장되지 않았습니다!
Subrata Sarkar

6

wp_redirect() 전에 사용해야 만 get_header() 헤더 오류가 표시되지 않습니다.


3
add_action('template_redirect', function(){
if(isset($_POST['subscriptio'])){// make this condition such that it only matches when a registraiotn form get submitted
/**
 * do your stuff here
 */
wp_redirect();//....
}
});

도움을 주셔서 감사하지만 그 코드는 저에게 효과적이지 않았습니다. 제대로 작동하려면 "wp_loaded"에 작업을 추가해야합니다 (제 답변보기)
Snowball

is_page_template()조건부 리디렉션시 설정해야하는 경우 잘 작동합니다 .
무법

1

당신은 또한 이것을 할 수 있습니다

아래 줄 대신

wp_redirect ( "$ url");

쓰다

echo("<script>location.href = '".$url."'</script>");

또는

<?php <script><?php echo("location.href = '".$url."';");?></script>?>

확실히 문제를 해결할 것입니다.

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