Como remover certas opções de tela e meta caixas de adicionar / editar tipo de postagem?

10

Agora, quando você adiciona ou edita uma postagem específica dentro do tipo de postagem desejado, também há mais opções de tela. Embora, essas opções de tela estejam mostrando / ocultando meta boxes. Eu gostaria de obter programaticamente uma lista de todas essas opções de tela registradas de meta boxes, para que eu possa verificar novamente se existe uma certa matriz de opções de tela e, se houver, planejo removê-las programaticamente.

WordPress - Opções de tela - Adicionar ou editar postagem - Meta Boxes Clique aqui para obter uma tela maior

Pergunta Como posso obter programaticamente uma lista de todas as Opções de tela registradas (meta boxes) nos tipos de postagem, em que você deseja adicionar ou editar uma postagem específica dentro do tipo de postagem desejado.

Por fim, o objetivo aqui é remover essas opções e não simplesmente desabilitá-las. Estou procurando fazer algo ao longo do que realizei para remover as meta boxes desnecessárias do painel .

Michael Ecklund
fonte

Respostas:

13

O que você precisa é global $wp_meta_boxesindexado por get_current_screen()->id. A remoção das opções da tela também removerá os metaboxes que você pode fazer antes que as opções da tela sejam exibidas usando o 'in_admin_header'gancho.

Então, vamos supor que você queira se livrar da opção de tela "Enviar Trackbacks" que você vê nesta captura de tela:

Solte a seguinte classe no functions.phparquivo do seu tema ou em um plug-in que você possa criar e o código removerá a opção de tela "Enviar Trackbacks" (e é metabox associado, que também é o que você queria, certo?):

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();

E aqui está o que parece depois de adicionar o código acima a um site WordPress 3.4:

Usando o depurador Zend no PhpStorm, aqui está a inspeção $wp_meta_boxes[get_current_screen()->id]para que você possa ver quais valores uma instalação padrão do WordPress 3.4 tem na tela Pós-edição (circulei os índices de matriz que referenciei no meu exemplo, ou seja $wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv']:

Espero que isto seja o que você estava procurando?

MikeSchinkel
fonte
3
Simplesmente incrível! Parabéns Ecklund, você não apenas recebeu uma resposta canônica, mas uma lendária ..!
Brasofilo 27/06/12
@brasofilo Obrigado pelo elogio. Estou honrado.
MikeSchinkel
@MikeSchinkel Isso funciona com a adição / edição de uma postagem, e obrigado por isso, mas como você remove as meta boxes de opções de tela para a página que possui uma tabela wp_list_table contendo uma lista de todas as suas postagens? Consulte a captura de tela # 1.
Michael Ecklund
@MichaelEcklund Oi, acho que não devo responder perguntas quando estiver cansado demais para compreender completamente a questão, não é? A resposta para a pergunta não respondida é realmente significativamente diferente daquela que eu respondi, então são duas perguntas diferentes. Como você se sentiria em editar esta pergunta para perguntar o que eu respondi e depois adicionar outra pergunta como perguntar o que eu não respondi? Se você puder fazer isso e postar um link para ele aqui nos comentários, então eu irei encontrar uma resposta com detalhes equivalentes para essa pergunta. Caso contrário, pode ser complicado escrever uma resposta coerente para ambos.
MikeSchinkel
11
@MichaelEcklund Legal, obrigado. Respondido: wordpress.stackexchange.com/a/56896/89
MikeSchinkel
0

Desculpe, é um pouco complicado, mas achei útil quando se trata de remover as caixas meta de wp out of box, mas não tanto para as meta boxes personalizadas ou relacionadas ao tema. Para ilustrar um pouco mais: instalei um novo tema que introduzia uma meta box personalizada sempre que você publica uma postagem / página que aparece nas opções da tela. (Eu sou novo no wp so) Por alguma razão, usando a abordagem de Mike, não consegui remover essa meta box personalizada, mas funcionou para tudo que não era personalizado. Por minha estupidez, eu continuava batendo na parede por horas ainda não conseguia descobrir, então tive que voltar a isso:

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
fonte