Admin_noticesの助けを借りるのは簡単です。
しかし、私はユーザーがその特定のページを離れるまで表示されるメッセージを作成することで助けを見つけることができません。すなわち。 正確に WordPressがそのPost updated. View post.
メッセージで日常的に示していること。
あなたが先に進むことを決心するまであなたはそのメッセージを見るだけです、あなたはそれを再び見ることはなく、そしてあなたは積極的にそれを消す必要はありません。
これが私たちがこれまでに持ってきたものです(これは恒久的なメッセージを作成します、明らかにこれは私たちが探している控えめなメッセージからは程遠いです):
function my_admin_notice() {
?>
<div class="updated">
<p><?php _e( 'Updated!', 'my-text-domain' ); ?></p>
</div>
<?php
}
add_action( 'admin_notices', 'my_admin_notice' );
簡単な答えは: クエリ文字列を使用する。
投稿を公開した直後にアドレスバーに気付いた場合は、次のようなものが表示されます。domain.com/wp-admin/post.php?post=4935&action=edit&message=6
いくつかの異なるクエリ変数があります。
post
は編集中の投稿のIDを含みます。action
は、現在Postを "編集中"だと言っています。message
は、投稿に対して何が行われたかに応じて表示される管理通知を表します。デフォルトの投稿タイプのメッセージの表示例と、カスタム投稿タイプに合わせてメッセージをカスタマイズする方法(管理者向けの通知)については、/ ここ を参照してください。
上記の例はカスタム投稿タイプを基準にしており、WordPressはすべての条件を処理します。メッセージをカスタマイズするだけです。
例えばあなたのプラグインのためのカスタム設定ページでこれをしたいと思うなら。あなたは同じことを達成するためにいくつかのステップを踏む必要があるでしょう。
ナットシェルの場合:
URLに追加のクエリ変数を追加して、ユーザーをカスタム設定ページに送信します。
admin_notices
にフックします。
admin_notices
フックに指定するコールバック関数の中には、メッセージの配列があります。ここで、配列キーはクエリ変数の値と一致し、配列値は適切なメッセージになります。
クエリ変数が存在するかどうかを確認してください。 (ユーザーがプラグインの設定ページにいることを確認してください。 get_current_screen();
- それ以外の場合は、すべての管理ページでグローバルに確認されます。)
クエリ変数のさまざまな値に対して追加の条件チェックを実行し、クエリ変数の値に応じて適切な管理者通知を表示します。
だから基本的に:
この答えはあなたがポストエディットスクリーンでこれをしたいと思うと仮定します。
基本的には、いくつかの条件が必要です。
特定の管理画面に対処するには
get_current_screen()
function特定のページが表示されるまでメッセージを表示するには:
add_query_arg()
functionredirect_post_location
hookさらに - もちろん - 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' );
上記の例はかなり一般的なものです。内蔵の投稿タイプ投稿の投稿編集画面に対応しています。上の例のToDoを参照してください。あなたが 自分で言った あなたはおそらくpublish_mycpt
タイプのフックである{status}_{post_type}
に対処したいと思うでしょう。詳細は Codex:Post Status Transitions を見てください。
私はあなたが何をしているのか理解していませんが、CPTポストパブリッシュ中にオプション(add_option)を追加し、そしてそのオプションの存在を確認し、もしあれば通知を表示することが可能でしょう。あなたが通知を表示しなければならない機能の中で、あなたはそれが再び表示されるのを止めるオプションを削除することもできます。
あるいは、ユーザーメタを追加して通知が表示されたら削除する - 単一のユーザーのみをターゲットにしている場合は最適なオプション