C'est assez facile de trouver de l'aide avec admin_notices qui:
Mais je ne peux pas trouver d'aide pour créer un message indiquant que l'utilisateur n'a pas quitté cette page. c'est à dire. exactement ce que WordPress montre régulièrement avec son message Post updated. View post.
.
Vous ne voyez ce message que jusqu'à ce que vous décidiez de passer à autre chose, vous ne le revoyez plus et vous n'avez pas à le rejeter activement.
Voici ce que nous avons eu jusqu’à présent (cela crée un message permanent, c’est évidemment loin du message discret que nous recherchons):
function my_admin_notice() {
?>
<div class="updated">
<p><?php _e( 'Updated!', 'my-text-domain' ); ?></p>
</div>
<?php
}
add_action( 'admin_notices', 'my_admin_notice' );
La réponse courte est: Utiliser des chaînes de requête.
Si vous remarquez dans la barre d'adresse immédiatement après avoir publié une publication ... vous verrez quelque chose de similaire à ceci: domain.com/wp-admin/post.php?post=4935&action=edit&message=6
Il y a quelques variables de requête différentes:
post
contient l'ID du message en cours de modification.action
indique que nous sommes en train de "modifier" la publication.message
fait référence à quel avis de l'administrateur doit être affiché en fonction de ce qui a été fait à la poste.Regardez ici pour obtenir un exemple d'affichage des messages de type de message par défaut et de la personnalisation des messages (notifications de l'administrateur/k/a) spécifiquement pour votre type de message personnalisé.
L'exemple ci-dessus est relatif à un type de message personnalisé et WordPress gère toutes les conditions pour vous. Tout ce que vous avez à faire est de personnaliser les messages.
Si vous vouliez le faire sur une page de paramètres personnalisés pour votre plugin, par exemple. Plusieurs étapes sont nécessaires pour accomplir la même chose.
Dans un écrou Shell:
Envoyez l'utilisateur à votre page de paramètres personnalisés AVEC une variable de requête supplémentaire ajoutée à l'URL.
Accrocher dans admin_notices
.
Dans la fonction de rappel que vous spécifiez pour le hook admin_notices
, vous avez un tableau de messages dans lequel la clé de tableau correspond à la valeur de votre variable de requête et la valeur du tableau correspond au message approprié.
Vérifiez si votre variable de requête est présente. (Assurez-vous de vérifier que l'utilisateur se trouve spécifiquement sur la page de configuration de votre plugin en utilisant: get_current_screen();
- sinon, vous effectuerez une vérification globale sur toutes les pages d'administration.)
Effectuez des vérifications conditionnelles supplémentaires pour les différentes valeurs possibles de votre variable de requête et affichez la notification de l'administrateur appropriée en fonction de la valeur de votre variable de requête.
Donc en gros:
Cette réponse suppose que vous souhaitiez le faire sur un écran de post-édition.
Fondamentalement, vous avez besoin de certaines conditions:
Pour adresser un écran d'administration spécifique:
get_current_screen()
functionPour afficher uniquement le message jusqu'à ce que la page spécifique soit laissée:
add_query_arg()
functionredirect_post_location
hookDe plus, bien sûr, utilisation du admin_notices
hook. Et - pour l'exemple ci-dessous - le save_post
hook.
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' );
L'exemple ci-dessus est à peu près générique. Il s’adresse à l’écran de post-édition du type de post intégré. Vous devez modifier certaines choses pour que cela fonctionne pour vous, voir l'exemple ci-dessus. Comme vous vous-même vous voulez probablement vous adresser à publish_mycpt
, qui est un type de hook {status}_{post_type}
, voir Codex: Transitions post-statut pour plus d'informations.
Je ne suis pas tout à fait sûr de comprendre ce que vous faites, mais serait-il possible d'ajouter une option (add_option) lors de la publication du CPT, puis de vérifier l'existence de cette option et, le cas échéant, d'afficher la notification. Dans la fonction, vous devez afficher la notification, vous pouvez également supprimer l'option permettant de l'arrêter à nouveau.
Vous pouvez également ajouter une méta utilisateur et la supprimer lorsque la notification est affichée - meilleure option si vous ne ciblez qu'un seul utilisateur.