Admin notice not displaying

时间:2017-03-23 作者:swilkeni

我是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) 实验很明显,我误解了一些基本的东西,有人能解释我的错误,以及我应该如何去纠正它吗?为什么要添加的行被点击时通知不显示?我觉得我在吃疯狂的药丸。

1 个回复
最合适的回答,由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\';
    }

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请