我使用WordPress WP_List_Table显示所有请求列表,我定制了大容量操作来批准和拒绝用户请求,但是每当执行批量操作时,我都想添加管理通知,但它不起作用,我认为页面正在重定向。
function process_bulk_action() {
if( 'approve'===$this->current_action() )
{
$objCustomUserRoles = new CustomUserRoles();
if(!empty($_REQUEST['wp_premium_users_request']))
{
foreach ($_REQUEST['wp_premium_users_request'] as $key => $value)
{
$objCustomUserRoles->updateCustomerToPremium($value);
}
add_action( 'admin_notices', 'my_update_notice');
}
}
}
function my_update_notice() {
?>
<div class="updated notice">
<p><?php _e( 'User approved!', 'avia_framework' ); ?></p>
</div>
<?php
} 发布于 2017-11-04 16:39:24
您的add_action( 'admin_notices', 'my_update_notice');行很好,您所附加的动作处理功能也很好。因此,这个问题与您所使用的process_bulk_action()函数在何时何地被调用有关。
记住,admin_notices钩子在WordPress中是在报头中发射。如果您的process_bulk_action()函数被一个主题或插件所使用,它实际上已经连接到了另一个在admin_notices事件发生之后出现的动作,那么您的通知将永远不会被看到。没有错误,只是什么都没有。你只是上钩太晚了。
要纠正这一点,请将这个process_bulk_action()函数的用法移到一个更早的钩子,即在admin_notices发生之前触发的钩子。我建议admin_init。通过这种方式,您的操作处理程序实际上将在应该调用的时候被调用,并且通知将按预期的方式显示。
还要确保在看到通知之前,没有任何其他代码可以将用户从处理表单提交的PHP进程中重定向出去;也就是说,如果用户在HTML标记加载之前被重定向,那么也不会看到通知。
撇开不说:--您发布的代码容易受到各种攻击。在使用之前,请确保正确地净化正在处理的请求数据。
简而言之,您不能确切地知道(除非您检查),$_REQUEST['wp_premium_users_request']实际上是一个数组。此外,您无法确切地知道数组实际包含了什么。因此,在使用来自web浏览器表单提交的不受信任数据源中的任何内容之前,一定要彻底验证/清理。
另外,一定要使用使用和验证一个。
https://stackoverflow.com/questions/47097798
复制相似问题