如何使ADMIN_NOTICES消息在用户离开该特定页面后消失?

时间:2015-04-09 作者:hawbsl

很容易找到有关admin\\u通知的帮助,其中包括:

在管理屏幕中永久显示仅在显示特定类型的页面时显示,直到用户将其取消为止,但我找不到帮助来创建一条消息,该消息将在用户离开该特定页面之前显示。例如,WordPress通过其Post updated. View post. 消息

enter image description here

你只会在决定继续之前看到这条消息,你不会再看到它,你也不必主动放弃它。

以下是我们目前得到的信息(这会产生一个永久性的信息,显然这远远不是我们所寻找的不引人注目的信息):

function my_admin_notice() {
?>
<div class="updated">
    <p><?php _e( \'Updated!\', \'my-text-domain\' ); ?></p>
</div>
<?php
}
add_action( \'admin_notices\', \'my_admin_notice\' );

3 个回复
SO网友:Michael Ecklund

简单的回答是:Use Query Strings.

如果您在发布帖子后立即在地址栏中注意到。。。您将看到类似的内容:domain.com/wp-admin/post.php?post=4935&action=edit&message=6

There\'s a few different Query Variables:

  1. post 包含正在编辑的帖子的ID
  2. action 说我们目前正在“编辑”这篇文章
  3. message 指根据对帖子所做的操作,应该显示哪些管理通知
外观here 有关查看默认帖子类型消息的示例,以及如何专门针对自定义帖子类型自定义消息(答/答管理通知)。

上面的示例与自定义的Post类型相关,WordPress为您处理所有条件。您所要做的就是自定义消息。

例如,如果您想在插件的自定义设置页面上执行此操作。你需要采取几个步骤来完成同样的事情。

In a nut shell:

将用户发送到自定义设置页面,并在URL中附加一个额外的查询变量。

钩入admin_notices.

在为admin_notices 钩子,有一个消息数组,其中它们的数组键将与查询变量的值匹配,数组值将是适当的消息。

检查您的查询变量是否存在。(请确保使用以下方法检查用户是否位于插件的设置页面上:get_current_screen(); - 否则,您将在每个管理页面上进行全局检查。)

对查询变量的不同可能值执行其他条件检查,并根据查询变量的值显示相应的管理通知。

So basically:

<检查用户是否在插件的设置页面上
  • 显示管理通知,其中消息与消息数组键中的消息匹配
  • SO网友:Nicolai Grossherr

    此答案假设您希望在后期编辑屏幕上执行此操作。

    说明:

    基本上,您需要一些条件:

    要解决特定的管理屏幕,请执行以下操作:

    用于此:get_current_screen() 功能仅在特定页面离开前显示消息:

    用于此:add_query_arg() 功能和:redirect_post_location 挂钩另外-当然-使用admin_notices 钩以及以下示例save_post

    示例:

    function wpse183752_the_admin_notice() {
        // get screen information
        $screen = get_current_screen();
        // screen condition    
        // TODO: change to the screen you want to address
        if ( $screen->id != \'post\' ) {
            return;
        }
        // query variable condition
        if ( ! isset( $_GET[ \'the_message\' ] ) || $_GET[ \'the_message\' ] != \'show\' ) {
            return;
        }
        ?>
        <div class="updated">
            <p>
                <?php _e( \'The Message\', \'the-text-domain\' ); ?>
            </p>
        </div>
        <?php
    }
    add_action( \'admin_notices\', \'wpse183752_the_admin_notice\' );
    
    function wpse183752_the_message( $old_query_string ) {
        // add the new query variable
        $new_query_string = add_query_arg( \'the_message\', \'show\', $old_query_string );
        // return the new query string
        return $new_query_string;
    }
    
    function wpse183752_set_message_variable() {
        // usage of wpse183752_the_message() callback with redirect_post_location
        // to setup the query variable on a hook, here save_post
        add_filter( \'redirect_post_location\', \'wpse183752_the_message\' );
    }
    // TODO: change to the hook you need
    add_action( \'save_post\', \'wpse183752_set_message_variable\' );
    
    注:上述示例基本上是一个通用示例。它处理内置post类型post的post编辑屏幕。您必须更改一些内容才能使其适合您,请参见上面示例中的待办事项。作为你said yourself 您可能想要解决publish_mycpt, 这是一个{status}_{post_type} 吊钩类型,参见Codex: Post Status Transitions 了解更多信息。

    SO网友:Mike

    我不完全清楚您在做什么,但是否可以在CPT发布后添加一个选项(add\\u option),然后检查该选项是否存在,如果存在,则显示通知。在必须显示通知的功能中,还可以删除选项以停止再次显示通知。

    或者,在显示通知时添加用户元并将其删除-如果您仅针对单个用户,则是最佳选择

    结束