我在插件中使用list table类的一个子类来列出记录的邮件。您可以选择多封邮件重新发送或删除。表单数据将再次发送到同一页面。
这些条目是可排序的。这意味着,对于标题列,链接是通过将orderby和order GET参数(基类行为)附加到当前url来创建的。
选择邮件并执行重新发送操作。操作前:
admin.php?page=wpml_plugin_log
提交
提交页面并处理操作后:
admin.php?page=wpml_plugin_log&bulkactionsnonce=3bb20a74fd&_wp_http_referer=%2Fwp-admin%2Fadmin.php%3Fpage%3Dwpml_plugin_log&search_date&s&_wpnonce=35ec405ae8&action=resend&email%5B0%5D=59&action2=-1&orderby=timestamp&order=asc
但我希望url中不再有“action”、“action1”、“email”参数。
处理操作后的链接包含“action”参数。这意味着,如果您更改列的顺序,邮件将一次又一次地重新发送(这毫无意义)。url也会增长,并在使用一段时间后导致URI过长的Web服务器错误(对于apache)。我如何避免这种行为?
SO网友:Parham
让我从一个问题开始:如果用户在处理操作后只刷新页面会怎么样?它将重新提交操作。
因此,问题不仅在于可排序列标题的链接以及WP\\U List\\U Table如何生成它们,还在于处理操作请求的方式。
最佳做法是在处理动作后将用户重定向回不包含动作参数的URL,并在第二个请求上呈现页面,而不是在动作请求上呈现页面。
例如:
用户从这里开始:admin.php?page=wpml_plugin_log
用户向发送请求admin.php?page=wpml_plugin_log&action=delete&id=123
删除操作已处理,用户重定向回admin.php?page=wpml_plugin_log&delete_success=123
如上所述,您还可以添加一些其他参数(
delete_success
) 重定向URL,以将已处理操作的状态传递给第二个请求。