从WP_LIST_TABLE::Tablenav中删除$_GET参数

时间:2016-01-21 作者:user67014

我正在使用URL参数作为自定义WP\\U List\\U表中的操作链接,供以下用户使用:

http://domain.com/wp-admin/users.php?page=account-expiration-status&do_action_xyz&email=email%40domain.com&_wpnonce=xyz
在父类中,我正在检查

array_key_exists( \'do_action_xyz\', $_GET )
触发相应的功能。

这很好,但不幸的是,$\\u GET-parameters也被添加到了表的分页链接中。这会导致在使用tablenav向前或向后浏览表时触发两次操作。

我尝试在执行所需操作后立即删除$\\u GET-parameters,包括:

unset( $_GET[\'do_action_xyz\'] );
以及

remove_query_arg( \'do_action_xyz\' );
但是WordPress仍然将它们添加到表的分页链接中。

在执行操作后,有人可以帮助我正确删除查询参数吗?

2 个回复
SO网友:birgire

您应该考虑您的操作的POST请求方法。

否则,您可能会试图劫持set_url_scheme 使用以下内容筛选:

add_filter( \'set_url_scheme\', \'wpse_remove_arg\' );

function wpse_remove_arg( $url )
{   
    return remove_query_arg( \'do_action_xyz\', $url );
}
然后您可以尝试缩小范围,只在相应的表页上运行它。此外,您可以通过将其添加到尽可能靠近表分页列表的位置,然后使用以下方法将其删除,从而限制其影响:

remove_filter( \'set_url_scheme\', \'wpse_remove_arg\' );
尽快。

SO网友:Walf

我在页面的load-{$plugin_page} 行动挂钩。我加上我的do_action_xyz a的参数wp_redirect() 它在添加过滤器后执行,但重定向URL似乎不受其影响。

我还“删除”页面上的查询参数,该参数用于使用history API。

$param = \'do_action_xyz\';
if (isset($_REQUEST[$param])) {
    add_filter(\'removable_query_args\', function($rqa) use ($param) {
        $rqa[] = $param;
        return $rqa;
    });
    add_action(\'admin_notices\', function() use ($param) {
        # show message here

        ?><script>
        if (history.replaceState) {
            history.replaceState(
                {}
                , document.title
                , location.pathname +
                    location.search.replace(/&<?= $param ?>=[^&]+/g, \'\') +
                    location.hash
            );
        }
        </script>
        <?php
    });
}

相关推荐

Can't Add Pagination

我无法添加分页来在页面之间划分帖子并在页面之间导航。目前所有20篇帖子我都有一次加载。我想在我的页面底部添加分页,并在5之前查看帖子。我有一个自定义的帖子类型,我将其定义为Project。我有两页。主页和日志。主页以我的项目帖子类型为特征,日志以我的常规博客帖子为特征。我希望这两页都有分页。我的当前索引。php是我的主页,如下所示:<?php get_header(); ?> <?php get_footer(); ?> <div class=\"p