我是WordPress开发的新手,如果用户在保存自定义帖子时忽略了所需字段,我会尝试显示管理员通知。当它们没有显示时,我意识到发生了重定向,所以将代码移动到我的init()
方法,其思想是检查是否设置了隐藏输入(表示保存),然后检查是否显示。经过一些调试,我发现自己陷入了一个非常混乱的境地。如果我简单地把
add_action(\'admin_notices\', \'image_error\');
每次都会按预期显示管理通知。如果我把它放在一个无关紧要的If语句中:
if (true) {
add_action(\'admin_notices\', \'image_error\');
}
也按预期工作。但是,如果我尝试执行以下代码块,则不会显示管理通知:
$flag_worked = isset($_POST[\'post_saved\']);
if ($flag_worked) {
$dumb = 1;
add_action(\'admin_notices\', \'image_error\');
}
逐步使用调试器可以确认
$flag_worked
确实是真的,输入代码块,
$dumb
设置为1,并且
add_action
执行第行。然而,当此语句的计算结果与
if (true)
实验很明显,我误解了一些基本的东西,有人能解释我的错误,以及我应该如何去纠正它吗?为什么要添加的行被点击时通知不显示?我觉得我在吃疯狂的药丸。
最合适的回答,由SO网友:cjbj 整理而成
这个add_action
函数仅将操作添加到队列中,当相应的do_action
被调用。所以,当你排队太晚时,什么也不会发生。
为了确定在您的情况下会发生什么,您必须仔细检查挂钩执行的顺序。这需要深入了解完整的设置,包括插件等。
我猜到时候isset($_POST[\'post_saved\'])
是真的do_action (\'admin_notices\')
已执行,并且排队等待它是无用的。
解决这个问题的方法不是有条件地添加操作。始终添加操作并将测试放在函数中。像这样:
add_action(\'admin_notices\', \'image_error\');
function image_error () {
$flag_worked = isset($_POST[\'post_saved\']);
if ($flag_worked) {
echo \'error\';
}