首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >admin_notices不在post编辑器中工作

admin_notices不在post编辑器中工作
EN

WordPress Development用户
提问于 2019-09-24 16:08:14
回答 2查看 1.3K关注 0票数 2

我正在尝试从pre_insert_term过滤器中触发一个管理通知(也尝试过作为一个操作)。示例:

代码语言:javascript
复制
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() { ?>
    
        My example warning message.

所以我在我的帖子中添加了一个标签并点击了更新按钮,但是它并没有像预期的那样显示管理通知。如果我将die()调用放在两个函数中,它将显示这些函数正在按预期运行,首先是上面的pre_insert_term_action(),然后是show_example_error()。

当我将admin_notices操作添加到pre_insert_term_action()函数范围之外时,管理员通知就会显示出来。那么,如果函数是按预期顺序启动的,那么如果在第一个触发函数中添加了操作,为什么我的管理通知不显示呢?

这个相关的问题中有一个公认的答案,建议使用add_settings_error(),但这并没有做任何我能明显看到的事情。

我还发现奇怪的是,如果我在我的$GLOBALS函数中定义了一个pre_insert_term_action()变量,那么当我在show_example_error()中调用它时,它不会返回一个值。

EN

回答 2

WordPress Development用户

回答已采纳

发布于 2019-09-25 18:57:31

因此,看起来在更新后的过程中有一些页面重定向,因此我甚至不能访问$GLOBALS变量。我发现使用的唯一替代方法是使用会话变量。类似于:

代码语言:javascript
复制
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']) ) {
        ?>
        
            My example warning message.
票数 2
EN

WordPress Development用户

发布于 2019-09-24 21:08:09

我会去做这样的事:

代码语言:javascript
复制
function my_notices() {
      $screen = get_current_screen();
      if ($screen->id === 'your-id') { //or anything else
        if (isset($_GET['save'])) { // or $_SESSION or transient

          
            My example warning message.

让我们看看WP屏幕对象。https://codex.wordpress.org/Class_参考/可湿性粉剂_屏幕

编辑

您可以使用$_GET、$_SESSION或检查在save_post操作或类似操作期间设置的瞬变项,如pre_insert_term筛选器。很好的解释

票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/348981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档