我正在使用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仍然将它们添加到表的分页链接中。
在执行操作后,有人可以帮助我正确删除查询参数吗?
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
});
}