WordPressのコメント欄のあたりをずっと触っているのですが、わからないことというか、知らない関数がたくさんありますね。
「wp-comments-post.php」のコードの最後らへんを覗きました
例えば、投稿されたコメントを保存する処理などは「wp-comments-post.php」に書いてあったりするんですが、その最後らへんに、
・・・(省略) $location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id; $location = apply_filters('comment_post_redirect', $location, $comment); wp_safe_redirect( $location ); exit;
ってコードがあります。
上のコード中にある「wp_safe_redirect( $location );」が今回の話題にしたいところです。周辺のコードについては今回は省略いたしますが、処理がひととおり終わったら、特定のURL($locationに格納されているURL)にリダイレクトされるようですね。
「wp_safe_redirect」
Codexの「Function Reference/wp safe redirect」を参考にいたしますと、名前の通り「安全にリダイレクトする」関数みたいですかね。
<?php wp_safe_redirect( $location, $status ); ?>
パラメーター
$location → リダイレクトさせるURLを入れる
$status → HTTPステータスコードを入れる(オプションで、デフォルトは「302」)
HTTPステータスコード302について
HTTPステータスコードについてはこちら「HTTPステータスコード」に詳しく書いてあります。「302」については、以下のように解説されています。
リクエストしたリソースが一時的に移動されているときに返される。
Location:ヘッダに移動先のURLが示されている。元々はMoved Temporarily(一時的に移動した)で、本来はリクエストしたリソースが一時的にそのURLに存在せず、別のURLにある場合に使用するステータスコードであった。
しかし、例えば掲示板やWikiなどで投稿後にブラウザを他のURLに転送したいときにもこのコードが使用されるようになったため、302はFoundになり、新たに303,307が作成された。
wp_safe_redirectの中身(WordPress3.5.1の場合)
wp_safe_redirectがどんな処理をしているか、というのは「wp-includes/pluggable.php」に以下のようにあります。
if ( !function_exists('wp_safe_redirect') ) : function wp_safe_redirect($location, $status = 302) { // Need to look at the URL the way it will end up in wp_redirect() $location = wp_sanitize_redirect($location); $location = wp_validate_redirect($location, admin_url()); wp_redirect($location, $status); } endif;
すごく単純にですが、「wp_sanitize_redirect」でリダイレクトさせようとするURLをサニタイズして「wp_validate_redirect」でさらにそのURLをバリデートして、最後の処理として「wp_redirect」でリダイレクト処理をしているという事ですかね。
まとめ
今回の「wp-comment-post.php」での「wp safe redirect」の使用例ですと、コメント投稿・保存などの処理が一通り終了したら、一時的な移動として利用される302リダイレクトが設定されているんだなぁと理解しました。なるほど~って感じです。
ところで、これって301リダイレクトとかも使えるってことですかね。そうだったら、サーバ移転などの時に、ちょっと使えそうだなぁなんて思いました。(恒久的なリダイレクトができるという意味で、です)
このページを共有する