接受的答案是最好的方式,但如果列表出现在自定义管理页面上,您将遇到已发送的标题错误。
我能想到的最好方法是检测嵌套_wp_http_referer
在…上admin_init
然后在那里重定向。
add_action( \'admin_init\', \'wpse_80112\' );
function wpse_80112() {
// If we\'re on an admin page with the referer passed in the QS, prevent it nesting and becoming too long.
global $pagenow;
if( \'admin.php\' === $pagenow && isset( $_GET[\'_wp_http_referer\'] ) && preg_match( \'/_wp_http_referer/\', $_GET[\'_wp_http_referer\'] ) ) :
wp_redirect( remove_query_arg( array( \'_wp_http_referer\', \'_wpnonce\' ), wp_unslash( $_SERVER[\'REQUEST_URI\'] ) ) );
exit;
endif;
}
请注意代码的计时。如果在此挂钩之后处理列表表操作(例如,在列表表类中),则在执行操作之前存在重定向风险,因此将被忽略,需要第二次请求。请确保在您自己的实现中适当地处理这一问题。
您可以考虑使用load-{page-hook}
action来处理操作,其中{page hook}是从add_submenu_page
(或类似)呼叫。