From 62642cb9fe17f1498047aa2970f2cdbbc91bc7b4 Mon Sep 17 00:00:00 2001 From: markjaquith Date: Fri, 21 Mar 2008 03:31:12 +0000 Subject: [PATCH] "Go back" link for admin-initiated post/page edits. e.g. do a search, edit a post, click the link to go back to the search. git-svn-id: http://svn.automattic.com/wordpress/trunk@7438 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/edit-form-advanced.php | 11 ++++++----- wp-admin/edit-page-form.php | 10 +++++++++- wp-admin/page.php | 5 ++++- wp-admin/post.php | 5 ++++- wp-includes/functions.php | 25 +++++++++++-------------- 5 files changed, 34 insertions(+), 22 deletions(-) diff --git a/wp-admin/edit-form-advanced.php b/wp-admin/edit-form-advanced.php index 389ea9543..fc98d28f9 100644 --- a/wp-admin/edit-form-advanced.php +++ b/wp-admin/edit-form-advanced.php @@ -1,13 +1,13 @@ go back.' ), attribute_escape( stripslashes( $_GET['_wp_original_http_referer'] ) ) ); +$messages[2] = __('Custom field updated.'); $messages[3] = __('Custom field deleted.'); ?> -

+

@@ -59,11 +59,12 @@ $saveasdraft = ' + diff --git a/wp-admin/edit-page-form.php b/wp-admin/edit-page-form.php index 7837206cd..8d419c3fc 100644 --- a/wp-admin/edit-page-form.php +++ b/wp-admin/edit-page-form.php @@ -1,4 +1,11 @@ go back.' ), attribute_escape( stripslashes( $_GET['_wp_original_http_referer'] ) ) ); +?> + +

+post_type ?>" /> +
diff --git a/wp-admin/page.php b/wp-admin/page.php index 1fd130a4e..2154e3468 100644 --- a/wp-admin/page.php +++ b/wp-admin/page.php @@ -123,7 +123,10 @@ case 'editpost': $referer = preg_replace('|https?://[^/]+|i', '', wp_get_referer()); if ( isset($_POST['save']) && ( empty($referredby) || $referredby == $referer || 'redo' != $referredby ) ) { - $location = "page.php?action=edit&post=$page_ID"; + if ( $_POST['_wp_original_http_referer'] && strpos( $_POST['_wp_original_http_referer'], '/wp-admin/post.php') === false ) + $location = add_query_arg( '_wp_original_http_referer', urlencode( stripslashes( $_POST['_wp_original_http_referer'] ) ), "page.php?action=edit&post=$page_ID&message=1" ); + else + $location = "page.php?action=edit&post=$page_ID"; } elseif ($_POST['addmeta']) { $location = add_query_arg( 'message', 2, wp_get_referer() ); $location = explode('#', $location); diff --git a/wp-admin/post.php b/wp-admin/post.php index 029a3e436..0e5d6062a 100644 --- a/wp-admin/post.php +++ b/wp-admin/post.php @@ -136,7 +136,10 @@ case 'editpost': $referer = preg_replace('|https?://[^/]+|i', '', wp_get_referer()); if ( isset($_POST['save']) && ( empty($referredby) || $referredby == $referer || 'redo' != $referredby ) ) { - $location = "post.php?action=edit&post=$post_ID"; + if ( $_POST['_wp_original_http_referer'] && strpos( $_POST['_wp_original_http_referer'], '/wp-admin/post.php') === false ) + $location = add_query_arg( '_wp_original_http_referer', urlencode( stripslashes( $_POST['_wp_original_http_referer'] ) ), "post.php?action=edit&post=$post_ID&message=1" ); + else + $location = "post.php?action=edit&post=$post_ID"; } elseif (isset($_POST['addmeta']) && $_POST['addmeta']) { $location = add_query_arg( 'message', 2, wp_get_referer() ); $location = explode('#', $location); diff --git a/wp-includes/functions.php b/wp-includes/functions.php index 2b51d70c2..8cc9e2fba 100644 --- a/wp-includes/functions.php +++ b/wp-includes/functions.php @@ -981,42 +981,39 @@ function wp_nonce_field( $action = -1, $name = "_wpnonce", $referer = true , $ec echo $nonce_field; if ( $referer ) - wp_referer_field( $echo ); + wp_referer_field( $echo, 'previous' ); return $nonce_field; } -function wp_referer_field( $echo = true ) { +function wp_referer_field( $echo = true) { $ref = attribute_escape( $_SERVER['REQUEST_URI'] ); $referer_field = ''; - - if ( wp_get_original_referer() ) { - $original_ref = attribute_escape( stripslashes( wp_get_original_referer() ) ); - $referer_field .= "\n".''; - } if ( $echo ) echo $referer_field; - return $referer_field; } - -function wp_original_referer_field( $echo = true ) { - $orig_referer_field = ''; +function wp_original_referer_field( $echo = true, $jump_back_to = 'current' ) { + $jump_back_to = ( 'previous' == $jump_back_to ) ? wp_get_referer() : $_SERVER['REQUEST_URI']; + $ref = ( wp_get_original_referer() ) ? wp_get_original_referer() : $jump_back_to; + $orig_referer_field = ''; if ( $echo ) echo $orig_referer_field; - return $orig_referer_field; } function wp_get_referer() { if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) - return $_REQUEST['_wp_http_referer']; + $ref = $_REQUEST['_wp_http_referer']; else if ( ! empty( $_SERVER['HTTP_REFERER'] ) ) - return $_SERVER['HTTP_REFERER']; + $ref = $_SERVER['HTTP_REFERER']; + + if ( $ref !== $_SERVER['REQUEST_URI'] ) + return $ref; return false; }