Wordpress에서 다른 관리 페이지로 리디렉션하는 방법
워드프레스 플러그인을 쓰고 있습니다.
(POST 데이터에서 DB 레코드를 작성한 후 등) 다른 관리 페이지로 리다이렉트하고 싶다.
헤더("Location: ...")도 wp_redirect()도 동작하지 않습니다.- I get
경고: 헤더 정보를 수정할 수 없습니다. 헤더는 이미 에서 전송되었습니다.
명백한 이유로부터 오는 거죠
Wordpress에서 리다이렉트를 올바르게 실행하는 방법
양식 작업에서 작업 URL에 'noheader=true'를 추가합니다.이렇게 하면 리다이렉트 전에 관리 영역의 헤더가 출력되지 않습니다.예를 들어 다음과 같습니다.
<form name="post" action="<?php echo admin_url('admin.php?page=your-admin-page&noheader=true'); ?>" method="post" id="post">
WP add_page* 함수를 사용하는 동안에도 플러그인 관리 페이지에서 다른 관리 페이지로 리다이렉트하려면 요청을 처리한 후 다음과 같이 에코할 수 있습니다.
<script type="text/javascript">
window.location = '/whatever_page.php';
</script>
이는 javascript 기반의 리다이렉트를 "/what_page.php"로 렌더링할 뿐이므로 Chris Ballance가 이미 말한 것처럼 WP에 의해 전송된 헤더에 문제가 발생하지 않습니다.
"/wp-admin/admin.admin?page=why_page"와 같은 "/wp-admin.admin?admin?page=why_page"로 변경합니다.
add_submenu_page(또는 관련 함수)가 추가된 링크의 경우 반환된 $hook_suffix를 사용하여 "load-$hook_suffix"에 액션을 추가하고 거기서 리다이렉트를 수행합니다.이렇게 하면 출력이 시작되기 전에 페이지 로드에 연결할 수 있습니다.
제가 잘못하고 있었던 것 같아요.
코드가 add_action('admin_menu', ...) 호출 내의 add_menu_page() 안에 있었습니다.
요청 중에 나중에 호출될 수 있습니다(페이지 헤더가 생성되어 표시된 후).
코드를 플러그인 핸들 바깥으로 이동하여 메인 스코프로 이동 - 약간의 청소와 수정이 필요하지만 리다이렉트는 동작합니다.
어쨌든, 답변 감사합니다.
출력이 전송되기 전에 wp_redirect()가 와야 합니다.
리다이렉트를 실행하기 전에 http 출력에 아무것도 송신되지 않았는지 확인해야 합니다.
"window.location('newlocation')"을 설정할 수 있습니다.그러면 출력이 브라우저로 전송된 후에도 리다이렉트 할 수 있습니다.
template_redirect에 로드합니다.
add_action('template_redirect', 'myplugin_template_redirect');
function myplugin_template_redirect() {
wp_redirect('http://www.example.com/', 301);
}
언급URL : https://stackoverflow.com/questions/495478/how-to-redirect-to-different-admin-page-in-wordpress
'programing' 카테고리의 다른 글
인터페이스 {}에서 []바이트 변환(골랑) (0) | 2023.03.17 |
---|---|
기본 인증을 위한 올바른 인증 헤더를 보내는 방법 (0) | 2023.03.17 |
JSON simplejson을 사용한 장고 모델 시리얼화 (0) | 2023.03.17 |
Angularjs 멀티파트 폼 데이터 및 파일 업로드 방법 (0) | 2023.03.17 |
@SpringBootApplication을 STS 유형으로 해결할 수 없음 (0) | 2023.03.17 |