我正试图在pre_insert_term
筛选器(也已尝试将其作为操作)。示例:
add_filter( \'pre_insert_term\', \'pre_insert_term_action\', 10, 2 );
function pre_insert_term_action( $term, $taxonomy ) {
add_action( \'admin_notices\', \'show_example_error\' );
return $term;
}
function show_example_error() { ?>
<div class="error">
<p>My example warning message.</p>
</div>
<?php }
因此,我在帖子中添加了一个标签,并点击了更新按钮,但它并没有像预期的那样显示管理员通知。如果我把
die()
在这两个函数中调用,它向我显示函数正在按预期启动,首先
pre_insert_term_action()
那么在上面
show_example_error()
.
当我添加admin_notices
操作超出pre_insert_term_action()
功能范围,则会显示管理通知。那么,如果函数按预期顺序启动,为什么我的管理通知没有显示是否在第一个启动函数中添加了操作?
有一个公认的答案this related question 建议使用add_settings_error()
但这并没有做任何我看得出来的事情。
我还发现,如果我定义$GLOBALS
my中的变量pre_insert_term_action()
函数,当我调用它时它不会返回值show_example_error()
.
最合适的回答,由SO网友:Talk Nerdy To Me 整理而成
因此,在更新后的过程中,似乎有一些页面重定向正在进行,因此我甚至无法访问$GLOBALS
变量我发现使用的唯一替代方法是使用会话变量。类似于:
add_filter( \'pre_insert_term\', \'pre_insert_term_action\', 10, 2 );
add_action( \'admin_notices\', \'show_example_error\' );
function pre_insert_term_action( $term, $taxonomy ) {
if ( MY CONDITION THAT WARRANTS A WARNING NOTICE IS TRUE ) {
if ( session_id() === \'\' || ! isset($_SESSION) ) {
session_start();
}
$_SESSION[\'show_my_error_message\'] = true;
return new WP_Error( \'code\', \'message\' );
}
return $term;
}
function show_example_error() {
if ( session_id() === \'\' || ! isset($_SESSION) ) {
session_start();
}
if ( isset($_SESSION[\'show_my_error_message\']) ) {
?>
<div class="error">
<p>My example warning message.</p>
</div>
<?php
unset($_SESSION[\'show_my_error_message\']);
}
}