redirect_post() 関数について解説:WordPress管理画面で前のページへリダイレクトする処理
redirect_post()関数は、WordPress管理画面で投稿の保存や公開、カスタムフィールドの操作後に、ユーザーを前のページへ自動でリダイレクトするために利用されます。
内部ではwp_redirect()で指定されたURLへ移動し、apply_filters()によりリダイレクト先のURLを柔軟に調整できます。
これにより、操作結果がURLのパラメータとして反映され、利用者に適切なフィードバックが提供されます。
関数の基本動作
利用シーン
投稿の保存・公開後のリダイレクト
投稿の保存や公開操作が完了した際に、ユーザーへ操作結果のフィードバックを表示するためにURLを生成し、リダイレクトを行います。
具体的には、投稿の状態に応じたメッセージコードをURLに付加し、編集画面や確認画面へ誘導する処理が実装されます。
例えば、保存時の場合は「下書き」としての状態が反映されたメッセージが表示され、公開時の場合は「公開成功」のメッセージをURLに含めることで、ユーザーが一目で結果を理解できるようになります。
以下は、投稿保存・公開時にリダイレクトするサンプルコードです。
// 投稿の保存または公開操作後のリダイレクト処理サンプル
$post_id = 123; // 投稿IDのサンプル
// 投稿保存の場合は草稿状態、公開の場合は公開状態に応じたメッセージコードを設定
if ( isset( $_POST['save'] ) ) {
$message = 10; // 草稿状態のメッセージコード
} else if ( isset( $_POST['publish'] ) ) {
$message = 6; // 公開成功時のメッセージコード
}
// 編集画面のURLを取得し、メッセージコードをクエリに追加
$edit_url = get_edit_post_link( $post_id, 'url' );
$redirect_url = add_query_arg( 'message', $message, $edit_url );
// リダイレクトの実行
wp_redirect( $redirect_url );
exit;
// 出力例は実行環境に依存しますが、結果として下記のようなURLが生成されます。
// https://example.com/wp-admin/post.php?action=edit&post=123&message=6
カスタムフィールド操作後のリダイレクト
カスタムフィールドの追加や削除など、投稿内容に対する補助的な操作の後もリダイレクト処理が実行されます。
この場合は、操作対象のカスタムフィールドに関連するフィードバックをURLのパラメータとして付加し、ユーザーを元の編集画面内の該当セクションへ誘導するように設計されています。
リファラー情報を利用して、操作元のURLに直接アンカー(例:#postcustom
)を追加することで、変更後の編集箇所にユーザーをスムーズに導いています。
以下は、カスタムフィールド追加操作時のサンプルコードです。
// カスタムフィールド追加後のリダイレクト処理サンプル
if ( isset( $_POST['addmeta'] ) && $_POST['addmeta'] ) {
// リファラーURLを基にメッセージコードとアンカーを追加
$redirect_url = add_query_arg( 'message', 2, wp_get_referer() );
$url_parts = explode( '#', $redirect_url ); // URLに既にアンカーが存在する場合の対策
$redirect_url = $url_parts[0] . '#postcustom';
wp_redirect( $redirect_url );
exit;
}
// 出力例
// https://example.com/wp-admin/post.php?message=2#postcustom
主な処理の流れ
URL生成と調整
リダイレクト先のURLは、管理画面の編集画面やリファラー情報を基に動的に生成されます。
この処理では、まず基本となるURL(例:get_edit_post_link()
で取得されるURLやwp_get_referer()
で取得されるリファラー)が用いられ、そこにadd_query_arg()
で必要なパラメータが追加されます。
さらに、apply_filters()
を介してURLの最終的な形を外部から調整できるため、柔軟なカスタマイズが可能となっています。
以下は、URL生成と調整の一例です。
// 編集画面URL取得とメッセージパラメータ追加のサンプル
$post_id = 123;
$edit_url = get_edit_post_link( $post_id, 'url' );
$redirect_url = add_query_arg( 'message', 6, $edit_url );
// 外部からURLを調整するフィルタの適用
$redirect_url = apply_filters( 'redirect_post_location', $redirect_url, $post_id );
// 出力例:フィルタが適用される場合も、基本形は次のようなURLとなります。
// https://example.com/wp-admin/post.php?action=edit&post=123&message=6
wp_redirect と exit の利用
実際のリダイレクト処理は、まずwp_redirect()
関数で指定されたURLへ転送し、その直後にexit
を呼び出すことでスクリプトの実行を停止します。
これにより、不要な後続処理が実行されず、意図しない出力やエラーの発生を防ぐことができます。
また、リダイレクト前に適切なHTTPヘッダーが送信されるので、ブラウザ側は即座に指定されたページへ遷移します。
以下は、wp_redirect()
とexit
を利用したリダイレクトのサンプルコードです。
// リダイレクト処理とスクリプト終了のサンプルコード
$location = 'https://example.com/wp-admin/edit.php?message=6';
wp_redirect( $location );
exit;
// 出力例:ユーザーは https://example.com/wp-admin/edit.php?message=6 にリダイレクトされます。
関連する WordPress 関数
wp_redirect() の役割
wp_redirect()
は、指定されたURLへHTTPヘッダーを利用してユーザーを転送する関数です。
この関数を利用することで、管理画面での各種操作後に速やかに画面遷移を実現し、ユーザーに操作結果を直感的に伝えることができます。
また、wp_redirect()
により生成されるリダイレクト処理は、SEO対策においてもシンプルかつ効果的な手法となっています。
apply_filters() による URL 調整
apply_filters()
はWordPressのフック機構の中心的な関数であり、URLの最終的な値を外部から変更できるようにしています。
これにより、プラグインやカスタムコードでリダイレクト先のURLに追加パラメータを付与するなど、柔軟なカスタマイズが可能です。
たとえば、以下のように記述することで、redirect_post_location
フィルタに登録された関数によりURLが変更されます。
// URLをフィルタで調整するサンプルコード
$location = 'https://example.com/wp-admin/edit.php?message=6';
$location = apply_filters( 'redirect_post_location', $location, $post_id );
// 出力例
// $locationがプラグイン等で変更され、例:https://example.com/custom_redirect?message=6 として返される可能性があります。
get_edit_post_link() と add_query_arg() の連携
get_edit_post_link()
は、指定した投稿の編集画面URLを返す関数です。
一方、add_query_arg()
はそのURLにクエリ文字列を追加するために使用されます。
この連携により、投稿の状態や操作結果に対応するメッセージコードなどの情報をURLに含め、管理画面上でのフィードバック表示を実現しています。
以下は、これら関数の連携サンプルコードです。
// 編集画面URL取得とメッセージコード追加のサンプルコード
$post_id = 123;
$edit_link = get_edit_post_link( $post_id, 'url' );
$redirect_url = add_query_arg( 'message', 6, $edit_link );
// 出力例
// https://example.com/wp-admin/post.php?action=edit&post=123&message=6
wp_get_referer() によるリファラー情報取得
wp_get_referer()
は、HTTPリクエストのリファラー情報や_wp_http_referer
パラメータから元のURLを取得する関数です。
この関数を利用することで、特にカスタムフィールドの更新など、操作前の画面に戻す必要があるケースにおいて、ユーザーを元の画面へ導くための参照URLを取得できます。
以下は、リファラー情報取得のサンプルコードです。
// リファラーURL取得のサンプルコード
$referer_url = wp_get_referer();
// 取得したURLに必要なパラメータやアンカーを追加してリダイレクト処理に利用
// 出力例
// https://example.com/wp-admin/post.php?message=2
投稿およびカスタムフィールド操作時の分岐処理
投稿状態の取得とメッセージ設定
get_post_status() の利用
get_post_status()
は指定された投稿の状態(例:draft
、pending
、publish
など)を取得する関数です。
この関数の返り値に基づいて、投稿が下書きか公開かを判定し、適切なメッセージコードの設定が可能となります。
例えば、下書きの場合は「草稿中」を示すコード、公開の場合は「公開成功」を示すコードを利用することで、ユーザーが状況を即座に把握できるようになります。
以下は、投稿状態取得のサンプルコードです。
// 投稿状態取得のサンプルコード
$post_id = 123;
$post_status = get_post_status( $post_id );
// 例:$post_statusが 'draft' の場合、草稿中と判断する
// 出力例
// $post_status が 'draft' であれば、草稿中を意味します
メッセージコードの設定
取得した投稿状態に基づいて、URLへ付加するメッセージコードを設定します。
例えば、下書きの場合はコード「10」、公開の場合はコード「6」や、保存操作の場合はコード「1」が設定されることが一般的です。
このメッセージコードによって、管理画面上で操作結果に応じたフィードバックがユーザーに表示されます。
以下は、状態に応じたメッセージコード設定の一例です。
// 投稿状態に応じたメッセージコード設定のサンプルコード
if ( isset( $_POST['save'] ) || isset( $_POST['publish'] ) ) {
$post_status = get_post_status( $post_id );
if ( $post_status === 'draft' ) {
$message = 10; // 草稿中の場合のコード
} else {
$message = isset( $_POST['publish'] ) ? 6 : 1; // 公開の場合は6、保存の場合は1
}
$redirect_url = add_query_arg( 'message', $message, get_edit_post_link( $post_id, 'url' ) );
}
// 出力例
// https://example.com/wp-admin/post.php?action=edit&post=123&message=6
編集画面への誘導処理
URLアンカーの追加によるリダイレクト
カスタムフィールドの操作後に、ユーザーがすぐに該当する編集箇所へアクセスできるよう、URLの末尾にアンカー(例:#postcustom
)を追加してリダイレクトを実行します。
この方法により、リダイレクト先が単なる画面遷移ではなく、特定のセクションに直接移動できるリンクとなり、ユーザーの操作性が向上します。
以下は、アンカー付きリダイレクトのサンプルコードです。
// カスタムフィールド操作後の編集画面への誘導サンプルコード
if ( isset( $_POST['deletemeta'] ) && $_POST['deletemeta'] ) {
$redirect_url = add_query_arg( 'message', 3, wp_get_referer() );
$url_parts = explode( '#', $redirect_url );
$redirect_url = $url_parts[0] . '#postcustom';
wp_redirect( $redirect_url );
exit;
}
// 出力例
// https://example.com/wp-admin/post.php?message=3#postcustom
まとめ
この記事では、redirect_post()関数の基本動作や利用シーンについて理解できます。
投稿の保存や公開後、またはカスタムフィールド操作後に適切なリダイレクト処理を実施する方法を紹介しました。
さらに、wp_redirect() や apply_filters()、get_edit_post_link()、add_query_arg()、wp_get_referer() など、連携する各種関数の役割と具体的な実装例から、管理画面でのフィードバックや誘導の工夫が学べる内容となっています。