webentwicklung-frage-antwort-db.com.de

Leiten Sie nach dem Löschen des Beitrags um und verfolgen Sie die Paginierung

Ich habe eine benutzerdefinierte Beitragsliste im Admin-Bereich. Diese Liste ist paginiert, das ist also die URL:

  • wp-admin/edit.php?post_type=xxx, wenn ich die Standardseite öffne
  • wp-admin/edit.php?post_type=xxx&paged=n, wenn ich zur n-ten Seite der Liste gehe

Jedes Mal, wenn ich ein Element dieser Liste endgültig lösche, möchte ich auf dieselbe Seite der Liste weitergeleitet werden, wenn diese Seite noch vorhanden ist, oder auf die vorherige Seite der Liste, wenn dieselbe Seite nicht mehr relevant ist.

Angenommen, ich habe drei Seiten für insgesamt 22 Elemente, wobei Seite eins 10 Elemente enthält, Seite zwei 10 Elemente enthält und Seite drei 2 Elemente enthält.

  • wenn ich das letzte Element von Seite drei lösche, sollte ich zu Seite drei weitergeleitet werden (da dort nach dem Löschen noch ein Element übrig ist).

  • Wenn ich jetzt das letzte Element von Seite drei lösche, sollte ich zu Seite zwei weitergeleitet werden (Seite drei ist jetzt nicht mehr vorhanden).

  • Wenn ich ein Element von Seite zwei lösche, sollte ich zu Seite zwei weitergeleitet werden (da Seite zwei noch vorhanden ist)

  • Wenn ich ein Element von Seite 1 lösche, sollte ich zu Seite 1 weitergeleitet werden (da Seite 1 noch vorhanden ist).

Bisher kann ich nur wie folgt zur Standard-Startseite der Liste umleiten:

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');

Ich weiß jedoch nicht, wie ich die Seitenzahl ermitteln kann, auf der ich mich nach dem Löschen befand (oder auf der ich mich vor dem Löschen befand), sodass ich danach nicht mehr zur entsprechenden Seite umleiten kann.

Ich habe versucht, $_GET['paged'] abzurufen, aber die obige Funktion wird nach dem Löschen ausgelöst, wenn die "ausgelagerte" Variable nicht mehr Teil der URL ist und daher keinen Wert zurückgibt.

Wie kann man das erreichen?

3
Baylock

Sie können $ _SERVER ['HTTP_REFERER'] verwenden, um die URL abzurufen, von der der Benutzer stammt.

Mit dem folgenden Code wird die ausgelagerte GET-Variable der vorherigen URL ermittelt, um festzustellen, auf welcher Seite sich der Benutzer befand. Anschließend wird gezählt, wie viele Beiträge von diesem bestimmten Beitragstyp (nur veröffentlicht) noch vorhanden sind und wie viele Seiten für die Anzeige aller Beiträge erforderlich sind Ergreifen Sie die entsprechende Weiterleitungsaktion.

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