管理パネルにカスタム投稿リストがあります。このリストはページ分割されているので、これはURLです。
wp-admin/edit.php?post_type=xxx
wp-admin/edit.php?post_type=xxx&paged=n
そのリストの項目を永久に削除するたびに、このページがまだ存在する場合はリストの同じページに、同じページが関連性がなくなった場合はリストの前のページにリダイレクトされます。
ページ1に10個のアイテムがあり、ページ2に10個のアイテムがあり、ページ3に2個のアイテムがある合計22個のアイテムに対して3ページあるとします。
3ページ目の最後の項目を削除すると、3ページ目にリダイレクトされます(削除後も1項目が残っているため)。
今、3ページ目の最後の項目を削除すると、2ページ目にリダイレクトされるはずです(現在のように、3ページ目はもう存在しません)。
2ページ目のアイテムを削除すると、2ページ目にリダイレクトされます(2ページ目はまだ存在するため)。
1ページ目のアイテムを削除すると、1ページ目にリダイレクトされます(1ページ目がまだ存在するため)。
これまでのところ、私はこのようにリストのデフォルトの最初のページにリダイレクトすることができます。
function my_deleted_post_handler()
{
global $post;
$post_type = $post->post_type;
wp_redirect("http://www.xxxxxx.com/wp-admin/edit.php?post_type=".$post_type);
exit;
}
add_action('deleted_post','my_deleted_post_handler');
しかし、削除後に自分のページ番号を取得する方法(または削除前に自分のページ番号を取得する方法)がわからないため、後で関連ページにリダイレクトすることはできません。
$_GET['paged']
を取得しようとしましたが、 "paged"変数がURLの一部ではなくなったため、削除後に上記の関数がトリガーされるため、値は返されません。
これを達成する方法?
$ _SERVER ['HTTP_REFERER']を使用すると、ユーザーのURLを取得できます。
次のコードは、前のURLのページ化されたGET変数を検索してユーザーがどのページにアクセスしていたかを判断し、その特定の投稿タイプの残りの投稿数を公開します。適切なリダイレクトアクションを取ります。
function my_deleted_post_handler()
{
global $post;
// URL the user came from
$referer = $_SERVER['HTTP_REFERER'];
// the page the user was on
$page = preg_match('/http:\/\/.*&paged=(\d*)/', $referer, $matches);
$page_num = $matches[1];
// how many published posts of $post_type?
$post_type = $post->post_type;
$num_posts = wp_count_posts($post_type)->published;
// how many pages of 10 items?
$pages = ceil($num_posts / 10);
if($pages < $page_num) {
// the page the user was on doesn't exist anymore
wp_redirect('http://www.xxxxxx.com/wp-admin/edit.php?post_type=' . $post_type . '&paged=' . $page_num - 1);
} else {
// the page still exists
wp_redirect('http://www.xxxxxx.com/wp-admin/edit.php?post_type=' . $post_type . '&paged=' . $page_num);
}
exit();
}
add_action('deleted_post','my_deleted_post_handler');