删除帖子后重定向并跟踪分页

时间:2013-01-22 作者:Baylock

我在管理面板中有一个自定义帖子列表。此列表已分页,因此这是其url:

  • wp-admin/edit.php?post_type=xxx, 如果打开默认页面wp-admin/edit.php?post_type=xxx&paged=n, 如果每次我永久删除列表中的一个项目时都转到列表的第n页,如果该页仍然存在,我希望重定向到列表的同一页;如果同一页不再相关,我希望重定向到列表的前一页。

    假设我有三页共22项,其中第一页有10项,第二页有10项,第三页有2项。

    如果我删除了第三页的最后一项,我应该重定向到第三页(因为删除后还有一项)

    如果我现在删除第三页的最后一项,我应该重定向到第二页(因为现在第三页已经不存在了)

    如果我删除了第二页的任何项目,我应该被重定向到第二页(因为第二页仍然存在)

    如果我删除了第一页的任何项目,我应该重定向到第一页(因为第一页仍然存在)

    到目前为止,我只能重定向到列表的默认第一页,如下所示:

    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的一部分时,删除后会触发上述函数,因此它不会返回任何值。

    如何做到这一点?

1 个回复
SO网友:tobbr

您可以使用$\\u SERVER[\'HTTP\\u REFERER\']获取用户来自的URL。

下面的代码将找到前一个URL的paged 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\');

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register