Benutzerdefiniertes wp_welcome_panel für jede Rolle oder jedes benutzerdefinierte Dashboard

Ich würde gerne mein Dashboard mit benutzerdefinierten Icons, Shortcuts, Guides etc. anpassen und dumb down. Ich kann das schon mit Widgets machen, aber ich würde es gerne wagen und etwas besser machen.

wp_welcome_panel in dieser Hinsicht, ist genial: Ich kann es anpassen, ich kann es zeigen, was ich will, aber … nur Administratoren können dies sehen. Also habe ich mich gefragt:

1) Kann ich wp_welcome_panel so anpassen, dass jede Rolle es sehen kann?

2) Kann ich Code vor den Widgets hinzufügen, um einen benutzerdefinierten Dashboard-Header ähnlich dem in wp_welcome_panel zu erstellen? Ich habe es schon versucht

function mycustomcontent() { echo '

Hello world

'; } add_action('load-index.php', 'mycustomcontent');

Aber … die HTML-Ausgabe wird vor allem platziert (direkt nach dem body-Tag), sogar die Seitenleiste wird gedrückt.

Danke im Voraus

Solutions Collecting From Web of "Benutzerdefiniertes wp_welcome_panel für jede Rolle oder jedes benutzerdefinierte Dashboard"

Wo ist das “Willkommensforum”?

Das WordPress-Dashboard (in dem sich das “Welcome Panel” befindet) ist im Grunde das

 ~/wp-admin/index.php 

Wann zeigt es?

Wie Sie beim Betrachten der Quelle sehen können , gibt es folgende Überprüfung:

 if ( has_action( 'welcome_panel' ) && current_user_can( 'edit_theme_options' ) ) 

Wie umgehen Sie die benötigte Fähigkeit? Mach es für alle verfügbar!

Dies bedeutet, dass die minimale Rolle / Fähigkeit (Rollennamen, die ebenfalls als functionen zugewiesen werden), edit_theme_options . Jetzt kannst du, wie @OlegButuzov in seiner Antwort gezeigt hat, entweder einen Callback an den user_has_cap Filter user_has_cap , oder den Filter innerhalb von get_user_meta() – eigentlich einen Filter innerhalb von get_metadata() – benennen

 apply_filters( "get_{$meta_type}_metadata", null, $object_id, $meta_key, $single ); 

Jetzt würde ein callback wie folgt aussehen. Stellen Sie sicher, dass der Haken so nah wie möglich an der Willkommensanzeige ist. 'all_admin_notices' wäre eine 'all_admin_notices' .

Stellen Sie sicher, dass Sie diesen Filter-Callback nur auf dem Dashboard und nur einmal auslösen. Andernfalls würden Sie einem Benutzer unerwünschte functionen geben, was dazu führt, dass Benutzer Zugriff auf Ihre aktuellen Designeinstellungen haben. Ich habe das WCM Current Admin Info- Plugin verwendet , um diese Daten abzurufen.

 // Hooking as late as possible add_action( 'all_admin_notices', 'wpse119694AddCapCheckOverride' ); function wpse119694AddCapCheckOverride() { // Do some check against get_current_screen() if ( 'dashboard' !== get_current_screen()->id ) add_filter( 'get_user_metadata', 'wpse119694AddEditThemeOptionsCap', 20, 4 ); } // The callback used to override the cap check function wpse119694AddEditThemeOptionsCap( $return, $objectId, $metaKey, $single ) { // Instantly remove to avoid conflicts later on remove_filter( current_filter(), __FUNCTION__ ); // Only for the current user if ( wp_get_current_user()->user_id !== $objectId ) return $return; // Only for the 'edit_theme_options' cap if ( 'edit_theme_options' === $metaKey ) return TRUE; return $return; } 

Zusätzlich: Zeigen Sie immer das Begrüßungsfenster an

Benutzer können das Begrüßungsfenster schließen. Manchmal wollen wir das nicht, weil wir annehmen, dass sie unsere wichtigen Informationen / Notizen oder aus welchen Gründen auch immer nicht gelesen haben. Hinweis: Sie müssen selbst einsteigen.

 add_action( 'all_admin_notices', 'wpse119694AddCapCheckOverride' ); function wpse119694AddCapCheckOverride() { // Do some check against get_current_screen() if ( 'dashboard' !== get_current_screen()->id ) add_filter( 'get_user_metadata', 'wpse119694ShowWelcomePanel', 20, 4 ); } function wpse119694ShowWelcomePanel( $return, $objectId, $metaKey, $single ) { // Instantly remove to avoid conflicts later on remove_filter( current_filter(), __FUNCTION__ ); // Only for the current user if ( wp_get_current_user()->user_id !== $objectId ) return $return; // ALWAYS show the welcome panel if ( 'show_welcome_panel' === $metaKey ) { // Implement additional checks in here return TRUE; } return $return; } 

Benutzerdefinierter Inhalt für das “Begrüßungsfenster”

Jetzt müssen wir als Erstes den ursprünglichen Inhalt loswerden. Dann können wir unseren benutzerdefinierten Inhalt basierend auf einer Benutzer ID / Name / Rolle / etc hinzufügen. Daher verwenden wir wp_get_current_user() , was eine Instanz von WP_User die mit allen benötigten Daten gefüllt ist.

 // Hook as close to the welcome panel as possible add_action( 'welcome_panel', 'wpse119684WelcomePanelContents' ); function wpse119684WelcomePanelContents() { remove_all_actions( current_filter() ); $userData = wp_get_current_user(); $html = < < EOF; // Here you start overriding the previous $html based on user capabilities. if ( 'some-check-against' === $userData ) $html = < < 

Jetzt sollten Sie in der Lage sein, jeden Teil Ihres "Begrüßungsfensters" für jeden Benutzer / jede Rolle / Fähigkeit anzupassen.

Referenz MarkUp

Eine gute Referenz, um Ihren eigenen Inhalt des "Begrüßungsfensters" für Ihren Benutzer zu wp_welcome_panel() ist die Standardfunktion wp_welcome_panel() Cores.

 

< ?php _e( 'Headline', 'your_textdomain' ); ?>

< ?php _e( 'Intro', your_textdomain' ); ?>

< ?php _e( 'Sub Headline', your_textdomain' ); ?>

< ?php _e( 'Want to complete your profile? :)', 'your_textdomain' ); ?>
< ?php /* Some more content in another column */ ?>
< ?php /* The last column */ ?>

Dafür gibt es zwei Möglichkeiten.

Sie können (a) die function edit_theme_options , read Quellcode von edit_theme_options read . oder (c) Ändern (überschreiben) Fähigkeit auf einem Fly für wp-admin / index.php für jeden Usertyp …

  add_filter('user_has_cap', 'se_119694_user_has_cap'); function se_119694_user_has_cap($capabilities){ global $pagenow; if ($pagenow == 'index.php') $capabilities['edit_theme_options'] = 1; return $capabilities; } 

Meine Empfehlung – mach kein a und / oder b.

  1. Du änderst den core. Es ist schlecht.
  2. Du gibst Permitionen (auch auf der Homepage von wp-admin) die diese Person nicht wirklich benötigt. Es ist ein Sicherheitsloch.

In diesem Fall können Sie Ihr Panel nur mit der Aktion admin_footer implementieren und mit jQuery ganz nach oben verschieben

 add_action('admin_footer-index.php', 'se_119694_admin_footer'); function se_119694_admin_footer(){ echo ''; echo '  '; }