Jak usunąć niektóre opcje ekranu i pola meta z dodawania / edycji typu postu?

10

Teraz, gdy dodajesz lub edytujesz określony post w pożądanym typie postu, dostępnych jest również więcej opcji ekranu. Chociaż te Opcje ekranu pokazują / ukrywają metadane. Chciałbym móc programowo uzyskać listę wszystkich tych zarejestrowanych opcji ekranowych metatoksów, dzięki czemu mogę ponownie sprawdzić, czy istnieje pewna tablica opcji ekranowych, a jeśli tak, planuję usunąć je programowo.

WordPress - Opcje ekranu - Dodaj lub edytuj post - Meta-skrzynki Kliknij tutaj, aby wyświetlić zrzut ekranu w pełnym rozmiarze

Pytanie W jaki sposób mogę programowo uzyskać listę wszystkich zarejestrowanych opcji ekranu (metadanych) na typach postów, w których chcesz dodać lub edytować konkretny post w ramach żądanego typu postu.

Ostatecznie celem jest usunięcie tych opcji, a nie tylko ich wyłączenie. Chcę zrobić coś zgodnie z tym, co osiągnąłem, usuwając niepotrzebne meta-skrzynki na desce rozdzielczej .

Michael Ecklund
źródło

Odpowiedzi:

13

Potrzebujesz globalnego $wp_meta_boxesindeksu według get_current_screen()->id. Usunięcie opcji ekranu spowoduje również usunięcie metaboksów, które możesz wykonać tuż przed wyświetleniem opcji ekranu za pomocą 'in_admin_header'haka.

Załóżmy więc, że chcesz pozbyć się opcji ekranowej „Send Trackbacks” widocznej na tym zrzucie ekranu:

Upuść następującą klasę w functions.phppliku motywu lub we wtyczce, którą możesz budować, a kod usunie opcję ekranową „Send Trackbacks” (i skojarzony z nią metabox, który jest również tym, czego chciałeś, prawda?):

class Michael_Ecklunds_Admin_Customizer {
  function __construct() {
    add_action( 'in_admin_header', array( $this, 'in_admin_header' ) );
  }
  function in_admin_header() {
    global $wp_meta_boxes;
    unset( $wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv'] );
  }
}
new Michael_Ecklunds_Admin_Customizer();

A oto jak to wygląda po dodaniu powyższego kodu do witryny WordPress 3.4:

Za pomocą debugera Zend w PhpStorm tutaj jest inspekcja, $wp_meta_boxes[get_current_screen()->id]dzięki czemu można zobaczyć, jakie wartości ma domyślna instalacja WordPress 3.4 na ekranie edycji postu (w moim przykładzie zakreśliłem indeksy tablic, do których się odwoływałem, tj . $wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv']:

Mam nadzieję, że tego właśnie szukałeś?

MikeSchinkel
źródło
3
Po prostu niesamowite! Gratulacje, Ecklund, otrzymałeś nie tylko odpowiedź kanoniczną, ale i legendarną ...!
brasofilo
@brasofilo Dzięki za komplement. Jestem zaszczycony.
MikeSchinkel
@MikeSchinkel Działa to przy dodawaniu / edytowaniu postu i dziękuję za to, ale jak usunąć metadane opcji ekranu dla strony, która ma tabelę wp_list_table zawierającą listę wszystkich twoich postów? Zobacz zrzut ekranu nr 1.
Michael Ecklund
@MichaelEcklund Cześć, chyba nie powinienem odpowiadać na pytania, kiedy jestem zbyt zmęczony, aby w pełni zrozumieć pytanie, co? Odpowiedź na pytanie, na które nie udzielono odpowiedzi, w rzeczywistości znacznie różni się od tego, na które odpowiedziałem, więc tak naprawdę są to dwa różne pytania. Jak byś się czuł, edytując to pytanie i zadając pytanie, na które odpowiedziałem, a następnie dodając kolejne pytanie jako pytanie, na które nie odpowiedziałem? Jeśli możesz to zrobić i opublikować link do tego tutaj w komentarzach, więc znajdę to, wyślę odpowiedź równoważnych szczegółów na to pytanie. W przeciwnym razie napisanie jednej spójnej odpowiedzi dla obu może się skomplikować.
MikeSchinkel
1
@MichaelEcklund Cool, dzięki. Odpowiedzi: wordpress.stackexchange.com/a/56896/89
MikeSchinkel
0

Przykro mi, ale jest to nieco boczna ścieżka, ale uznałem, że jest przydatna, jeśli chodzi o usuwanie wp z pudełka z meta-skrzynek, ale nie tak bardzo w przypadku niestandardowych lub niestandardowych meta-skrzynek związanych z motywem. Aby zilustrować nieco więcej: zainstalowałem nowy motyw, który wprowadził niestandardowe meta-pudełko za każdym razem, gdy nowy post / strona pojawia się w opcjach ekranu. (Jestem nowy na wp, więc) Z jakiegoś powodu, stosując podejście Mike'a, nie byłem w stanie usunąć tego niestandardowego pola meta, ale zadziałało ono dla wszystkiego, co niestandardowe. Ku mojej głupocie wciąż uderzałem o ścianę przez wiele godzin, wciąż nie mogłem rozgryźć, więc musiałem wrócić do tego:

if (is_admin()) :
function my_remove_meta_boxes() 
{
  if(!current_user_can('administrator')) 
  {
    remove_meta_box('theme_custom_meta_box', 'post', 'side');
  }
}
add_action( 'add_meta_boxes', 'my_remove_meta_boxes' );
endif;
Yinnie
źródło