web-dev-qa-db-ja.com

Wp_redirectを機能させるためにどこに配置する必要がありますか?

フロントエンドの投稿編集ページがmysite/post_id/editにあり、投稿者ではないユーザーを投稿にリダイレクトしようとしています。これが私が働いているコードです:

    <?php
    global $current_user; get_currentuserinfo();
    if($post->post_author != $current_user->ID):
    wp_redirect( the_permalink() ); exit;
    ?>

私が抱えていた問題は、これがリダイレクトではなく単に投稿のパーマリンクを表示しているように見えることです。

wp_redirect "wp_redirectはページが開始されている場合は呼び出されないので、必ずもっと高い番号で呼び出してください。" - しかし、コードをheader.phpファイルの一番上に配置した後も、リダイレクトするのではなくパーマリンクが表示されるという同じ問題が発生しました。

リダイレクトするためにこのコードを追加する適切な場所はどこでしょうか。

前もって感謝します!

_ edit _ :miloのアドバイスで何かを試してみたが、Miloの話を更新する前にTommixの投稿に従う。

6
Stephen S.

あなたがテンプレートに入ったら、ヘッダはすでに送信されているので遅すぎます。テンプレートリダイレクトフックのように、チェックするリクエストの前半でフックする必要があります。

add_action( 'template_redirect', 'wpse52455_redirect' );

function wpse52455_redirect(){
    // do your check and call wp_redirect here
}

これは every リクエストで呼び出されるので、現在のページがあなたの編集ページであることを確認する必要もあります。

編集 - 上記のコードはあなたのテーマのfunctions.phpファイルに入ります。

14
Milo