it-swarm.com.de

Wie erstelle ich eine admin_notices-Nachricht, die verschwindet, sobald der Benutzer diese bestimmte Seite verlässt?

Es ist einfach genug, Hilfe mit admin_notices zu finden, die:

  • dauerhaft im Admin-Bildschirm anzeigen
  • nur anzeigen, wenn eine bestimmte Art von Seite angezeigt wird
  • zeigen, bis der Benutzer es schließt

Ich kann jedoch keine Hilfe beim Erstellen einer Nachricht finden, die angezeigt wird, bis der Benutzer diese bestimmte Seite verlässt. dh genau was WordPress routinemäßig mit seiner Post updated. View post. Nachricht anzeigt.

enter image description here

Sie sehen diese Meldung nur, bis Sie sich entschließen, fortzufahren. Sie sehen sie nicht mehr und müssen sie nicht aktiv abweisen.

Hier ist, was wir bisher haben (dies erzeugt eine permanente Nachricht, offensichtlich ist dies weit entfernt von der unauffälligen Nachricht, nach der wir suchen):

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

Die kurze Antwort lautet: Verwenden Sie Abfragezeichenfolgen.

Wenn Sie direkt nach dem Veröffentlichen eines Beitrags in der Adressleiste Folgendes sehen: domain.com/wp-admin/post.php?post=4935&action=edit&message=6

Es gibt ein paar verschiedene Abfragevariablen:

  1. post enthält die ID des Beitrags, der bearbeitet wird.
  2. action sagt, dass wir gerade den Beitrag "bearbeiten".
  3. message bezieht sich darauf, welche Administratorbenachrichtigung angezeigt werden soll, je nachdem, was mit der Veröffentlichung geschehen ist.

Suchen Sie hier nach einem Beispiel für die Anzeige der Standardposttyp-Nachrichten und für das Anpassen der Nachrichten (a/k/a-Administratorbenachrichtigungen) speziell für Ihren benutzerdefinierten Posttyp.

Das obige Beispiel bezieht sich auf einen benutzerdefinierten Beitragstyp und WordPress behandelt alle Bedingungen für Sie. Sie müssen lediglich die Nachrichten anpassen.

Wenn Sie dies zum Beispiel auf einer Seite mit benutzerdefinierten Einstellungen für Ihr Plugin tun möchten. Sie müssten mehrere Schritte ausführen, um dasselbe Ziel zu erreichen.

In einer Nussschale:

Senden Sie den Benutzer mit einer zusätzlichen Abfragevariablen, die an die URL angehängt ist, an Ihre Seite mit benutzerdefinierten Einstellungen.

Haken Sie in admin_notices ein.

Verfügen Sie in der Rückruffunktion, die Sie für den Hook admin_notices angeben, über ein Array von Nachrichten, wobei der Arrayschlüssel mit dem Wert Ihrer Abfragevariablen übereinstimmt und der Arraywert die entsprechende Nachricht ist.

Überprüfen Sie, ob Ihre Abfragevariable vorhanden ist. (Vergewissern Sie sich, dass sich der Benutzer auf der Einstellungsseite Ihres Plugins befindet, indem Sie Folgendes verwenden: get_current_screen(); - ansonsten überprüfen Sie global auf jeder Administrationsseite.)

Führen Sie zusätzliche bedingte Prüfungen für die verschiedenen möglichen Werte Ihrer Abfragevariablen durch und zeigen Sie den entsprechenden Administratorhinweis an, der vom Wert Ihrer Abfragevariablen abhängt.

Also im Grunde:

  • Überprüfen Sie, ob sich der Benutzer auf der Einstellungsseite Ihres Plugins befindet.
  • Überprüfen Sie, ob Ihre Abfragevariable vorhanden ist.
  • Überprüfen Sie, ob der Wert Ihrer Abfragevariablen mit dem erwarteten Wert übereinstimmt.
  • Wählen Sie die entsprechende Nachricht aus, abhängig vom erwarteten Wert, der in Ihrer Abfragevariablen mit einem Array-Schlüssel in Ihrem Nachrichten-Array übereinstimmt.
  • Administratorbenachrichtigung mit einer Nachricht anzeigen, die mit dem Nachrichtenarrayschlüssel übereinstimmt.
6
Michael Ecklund

In dieser Antwort wird davon ausgegangen, dass Sie dies in einem Post-Edit-Bildschirm tun möchten.

Erläuterung:

Grundsätzlich benötigen Sie einige Voraussetzungen:

  1. So richten Sie sich an einen bestimmten Administratorbildschirm:

  2. So zeigen Sie die Nachricht nur an, bis die bestimmte Seite verlassen wurde:

Zusätzlich - natürlich - Verwendung des admin_notices hook. Und - zum Beispiel - den save_post hook.

Beispiel:

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' );

Hinweis:

Das obige Beispiel ist so ziemlich ein generisches. Es richtet sich an den Post-Bearbeitungsbildschirm des eingebauten Post-Typs. Sie müssen einige Dinge ändern, damit es für Sie funktioniert, siehe das ToDo im obigen Beispiel. Wie Sie selbst gesagt haben möchten Sie wahrscheinlich publish_mycpt adressieren, bei dem es sich um einen {status}_{post_type}-Typ handelt. Weitere Informationen finden Sie unter Codex: Post Status Transitions .

2
Nicolai

Ich bin nicht ganz sicher, ob ich verstehe, was Sie tun, aber wäre es möglich, eine Option (add_option) während der CPT-Nachveröffentlichung hinzuzufügen und dann die Existenz dieser Option zu überprüfen und, falls vorhanden, den Hinweis anzuzeigen. Innerhalb der Funktion, in der Sie den Hinweis anzeigen müssen, können Sie auch die Option deaktivieren, dass er nicht mehr angezeigt wird.

Alternativ können Sie Benutzer-Metas hinzufügen und entfernen, wenn der Hinweis angezeigt wird. Dies ist die beste Option, wenn Sie nur einen einzelnen Benutzer als Ziel angeben

0
Mike