Ich würde gerne in der Lage sein, Meta-Boxen mithilfe von Bildschirmoptionen auszublenden, anstatt sie zu entfernen oder auf Benutzerrollen zu beschränken. Das Ziel ist es, die Meta-Box für den Benutzer nur zu deaktivieren.
Ich sehe, wie schwierig dies wäre, da jeder Code, der eine DB-Änderung für einen Benutzer bewirken würde, nicht jedes Mal ausgeführt werden darf, wenn er auf die Seite gelangt, da er nur zurückgesetzt wird. Aber klügere Leute, als ich den Kern codiere, vielleicht gibt es einen Weg. Und wenn ja, dann möchte ich es unbedingt wissen.
Irgendwelche Ideen?
Antworten:
Sie beziehen sich auf die Metaboxen auf dem Admin-Post-Bildschirm, oder?
Dafür brauchst du kein Plugin, lege einfach folgendes in deine functions.php-Datei.
Grundsätzlich passiert, dass Sie für den aktuell angemeldeten Benutzer einige gespeicherte Metawerte in der Tabelle wp_usermeta ändern.
Es gibt zwei Möglichkeiten, diese Funktion zu verwenden: Sie können sich entweder in 'user_register' oder in 'admin_init' einbinden.
Der Vorteil der Verwendung von 'user_register' besteht darin, dass diese Funktion nur ausgelöst wird, wenn ein neuer Benutzer registriert wird (daher geringerer Overhead). Es funktioniert jedoch nicht für Benutzer, die bereits vorhanden sind.
Wenn Sie möchten, dass es für Benutzer funktioniert, die bereits existieren, schließen Sie 'admin_init' an. Der Nachteil ist natürlich, dass diese Funktion jetzt jedes Mal ausgelöst wird, wenn ein Benutzer die Admin-Seite aufruft.
quelle
functions.php
Datei meines Themas einfügen, da die Standardoptionen für ein bestimmtes Projekt gelten, das durch das von mir entwickelte Thema dargestellt wird.Es gibt einen
default_hidden_meta_boxes
Filterget_hidden_meta_boxes()
, mit dem Sie Änderungen vornehmen können, die nicht angezeigt werden, solange der Benutzer seine Einstellungen in den Bildschirmoptionen nicht geändert hat.quelle
Ich habe Codekommentare zu drei bereits veröffentlichten Lösungen, aber auch einen allgemeinen Kommentar
Sie bieten eine suboptimale Auswahl: entweder die Auswahl der Bildschirmoptionen des Benutzers überschreiben; oder respektiere es, aber lasse deinen Code ignorieren, wenn der Benutzer jemals die Kontrollkästchen geändert hat, auch für andere meta_boxes oder bevor dein Code in WP war. Scheint, die respektvolle Wahl ist nur sinnvoll, wenn alle Ihre Benutzer neu sind. Die beste Lösung wäre, eine benutzerdefinierte Benutzeroption festzulegen, um festzustellen, ob Ihre spezifischen meta_box-Standardeinstellungen vom Benutzer geändert wurden, und dies zu respektieren. Nein, ich habe diesen Code nicht geschrieben! Sollte einfach sein ... :)
Die drei Lösungen veröffentlicht:
1. Die
hidden_meta_boxes
Lösung von WraithKenny überschreibt die user_option. Beachten Sie, dass alle Beitragstypen ("Beitrag", "Seite", "Link", "Anhang" und alle benutzerdefinierten Beitragstypen) abgedeckt werden. Das ist in Ordnung, es sei denn, Sie möchten, dass es spezifisch ist. Sie haben den post_type in Ihrenadd_meta_box()
Aufrufen angegeben. Sie können versuchen, diese zu finden, oder es einfach nur versuchen, da diejenigen, die nicht passen, ignoriert werden. Wenn Sie den post_type im Filter wissen möchten, können Sie den zusätzlichenscreen
Parameter verwenden:2. Respektiert, wie Rarst sagt,
default_hidden_meta_boxes
die user_option. Wie beihidden_meta_boxes
können Sie den Parameter $ screen verwenden, um post_types zu unterscheiden.3. Die set_user_metaboxes () -Funktion von Drebabels berücksichtigt auch die user_option. Beachten Sie, dass es für den Bearbeitungsbildschirm "Post" fest programmiert ist. Um den Bearbeitungsbildschirm 'Seite' und andere post_types zu handhaben, schließen Sie den Code in diese Schleife ein:
Ja,
get_user_meta
sollte seinget_user_option
. Für einzelne Standorte spielt es keine Rolle, und selbst für mehrere Standorte ist dies wahrscheinlich nicht der Fall. Siehe wp-admin / includes / ajax-actions.php für den Grund: Hatupdate_user_option
den globalen Parameter 'true'.quelle
Es gibt auch
hidden_meta_boxes
Filter, die die Metabox bei jedem Laden der Seite "deaktivieren" (verbergen) (aber die Datenbank überhaupt nicht aktualisieren müssen). Wenn Sie es nur für neue Benutzer deaktivieren möchten, bis sie das Kontrollkästchen selbst aktivieren, verwenden Sie die Antwort von Rarst.quelle