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
Das WordPress-Dashboard (in dem sich das “Welcome Panel” befindet) ist im Grunde das
~/wp-admin/index.php
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' ) )
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; }
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; }
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.
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 /* 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.
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 ' '; }