私はWordpressプラグインを書いています。
(POST データなどから DB レコードを作成した後) 他の ADMIN ページへのリダイレクトを実行したいと考えています。
header("Location: ...) も wp_redirect() も機能しません-取得します
警告: ヘッダー情報を変更できません - ヘッダーは既に送信済みです
これは明らかな理由から来ています。
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>
これは、「/whatever_page.php」へのjavascriptベースのリダイレクトをレンダリングするだけなので、Chris Ballanceがすでに言ったように、WPによってすでに送信されたヘッダーに問題がないようにします。
「/whatever_page.php」を「/wp-admin/admin.php?page=whatever_page」のように変更します
add_submenu_page (または関連する関数) で追加されたリンクの場合、返された $hook_suffix を使用して "load-$hook_suffix" にアクションを追加し、そこでリダイレクトを行います。これは、出力が開始される前にページの読み込みにフックする方法です。
リダイレクトが行われる前に、http 出力に何も送信されないようにする必要があります。
「window.location('newlocation');」を設定できます 出力がブラウザに送信された後でもリダイレクトできます。
出力が送信される前に wp_redirect() が来ることを確認するだけでよいと思います。
template_redirectにロードします。
add_action('template_redirect', 'myplugin_template_redirect');
function myplugin_template_redirect() {
wp_redirect('http://www.example.com/', 301);
}