Chciałbym móc ukrywać meta-skrzynki za pomocą opcji ekranu, zamiast je usuwać lub ograniczać do ról użytkowników, celem jest po prostu „odznaczenie” meta-boxu dla użytkownika.
Rozumiem, że byłoby to trudne, ponieważ żaden kod, który wprowadziłby zmianę DB dla użytkownika, nie byłby uruchamiany przy każdym wejściu na stronę, ponieważ po prostu resetuje się. Ale mądrzejsi ludzie niż ja kodują rdzeń, więc może jest jakiś sposób. A jeśli tak, to umieram, żeby wiedzieć.
Jakieś pomysły?
Odpowiedzi:
Masz na myśli metaboksy na ekranie posta administratora, prawda?
Do tego nie potrzebujesz wtyczki, po prostu upuść następujące elementy w pliku functions.php.
Zasadniczo dzieje się tak, że dla aktualnie zalogowanego użytkownika zmieniasz niektóre zapisane wartości meta_wartości w tabeli wp_usermeta.
Istnieją dwa sposoby korzystania z tej funkcji: możesz podłączyć się do „user_register” lub możesz podłączyć się do „admin_init”.
Zaletą używania „user_register” jest to, że ta funkcja będzie uruchamiana tylko po zarejestrowaniu nowego użytkownika (a zatem niższe koszty ogólne). Jednak nie będzie działać dla użytkowników, którzy już istnieją.
Jeśli chcesz, aby działał dla użytkowników, którzy już istnieją, podłącz się do 'admin_init'. Wadą jest oczywiście to, że teraz ta funkcja jest uruchamiana za każdym razem, gdy użytkownik przechodzi na stronę administratora.
źródło
functions.php
pliku mojego motywu, ponieważ domyślne opcje dotyczą konkretnego projektu, który jest reprezentowany / mieści się w opracowywanym przeze mnie motywie.Istnieje
default_hidden_meta_boxes
filtr,get_hidden_meta_boxes()
który pozwala modyfikować, które nie są wyświetlane, dopóki użytkownik nie zmodyfikował swoich preferencji w opcjach ekranu.źródło
Mam komentarze do kodu dotyczące trzech opublikowanych już rozwiązań, ale także komentarz ogólny
Przedstawiają wybór nieoptymalny: albo przesłonić pole wyboru Opcje ekranu użytkownika; lub uszanuj go, ale zignoruj kod, jeśli użytkownik kiedykolwiek zmienił pola wyboru, nawet w przypadku innych meta_box lub zanim kod był w WP. Wydaje się, że pełen szacunku wybór jest użyteczny tylko wtedy, gdy wszyscy użytkownicy są nowi. Najlepszym rozwiązaniem byłoby ustawienie niestandardowej opcji użytkownika w celu ustalenia, czy określone ustawienia domyślne meta_box zostały zmienione przez użytkownika, i przestrzeganie tego. Nie, nie napisałem tego kodu! Powinno być łatwe ... :)
Trzy opublikowane rozwiązania:
1. Rozwiązanie WraithKenny
hidden_meta_boxes
to takie, które zastępuje opcję user_option. Uwaga: obejmuje wszystkie typy postów („post”, „strona”, „link”, „załącznik” i wszelkie niestandardowe typy postów). W porządku, chyba że chcesz, żeby było specyficzne. Podałeś typ postu w swoichadd_meta_box()
połączeniach. Możesz spróbować dopasować je lub po prostu uskrzydlić, ponieważ te, które nie pasują, zostaną zignorowane. Jeśli chcesz znać typ postu w filtrze, możesz użyć dodatkowegoscreen
parametru:2. Jak mówi Rarst,
default_hidden_meta_boxes
szanuje opcję user_option. Tak jak w przypadkuhidden_meta_boxes
, możesz użyć parametru $ screen do rozróżnienia typów post_.3. Funkcja set_user_metaboxes () Drebabels również uwzględnia opcję user_option. Uwaga: jest na stałe zakodowany na ekranie edycji „po”. Aby obsłużyć ekran edycji „strony” i inne typy post_, zawiń kod w tej pętli:
Tak,
get_user_meta
powinno byćget_user_option
. W przypadku pojedynczej witryny nie ma to znaczenia, a nawet w przypadku wielu witryn prawdopodobnie nie ma znaczenia. Zobacz wp-admin / obejmuje / ajax-Actions.php, aby dowiedzieć się, dlaczego:update_user_option
ma parametr globalny „true”.źródło
Istnieje również
hidden_meta_boxes
filtr, który „odznaczałby” metaboks (powodując, że jest ukryty) przy każdym ładowaniu strony (ale nie musiałby w ogóle aktualizować bazy danych). Jeśli chcesz tylko wyłączyć tę opcję dla nowych użytkowników, dopóki sami nie zaznaczą tego pola, skorzystaj z odpowiedzi Rarsta.źródło