web-dev-qa-db-ja.com

投稿を削除した後にリダイレクトし、ページ区切りを追跡します

管理パネルにカスタム投稿リストがあります。このリストはページ分割されているので、これはURLです。

  • デフォルトページを開いた場合はwp-admin/edit.php?post_type=xxx
  • リストのnページ目に移動した場合は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の一部ではなくなったため、削除後に上記の関数がトリガーされるため、値は返されません。

これを達成する方法?

3
Baylock

$ _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');
1
tobbr