Como alterar a posição padrão das meta boxes do WP?


Respostas:


22

Você pode remover as meta boxes padrão com remove_meta_box e adicioná-las novamente em uma posição diferente com add_meta_box:

add_action('do_meta_boxes', 'wpse33063_move_meta_box');

function wpse33063_move_meta_box(){
    remove_meta_box( 'postimagediv', 'post', 'side' );
    add_meta_box('postimagediv', __('Featured Image'), 'post_thumbnail_meta_box', 'post', 'normal', 'high');
}

Isso o removerá da coluna lateral e o adicionará à coluna principal. mude postneste exemplo para o nome do seu tipo de postagem personalizado.


Isso parece ideal, obrigado novamente Milo, vou tentar.
precisa saber é o seguinte

@Milo: Como se fosse add_meta_box()necessário um $callbacknome de função, como é que eu sei o nome da função usada pelo WordPress? Suponha que eu queira fazer o mesmo com a barra lateral meta_box 'Categories' (#categorydiv)?
Mayeenul Islam

5
O @MayeenulIslam olha no arquivo /wp-admin/edit-form-advanced.phpe você verá onde o WordPress adiciona todas as meta boxes principais e os retornos de chamada e argumentos que ele usa. para categorias é post_categories_meta_box.
Milo

5

Eu também lutei com isso. Eu realmente não encontrei uma maneira limpa de redefinir o layout / pedido - principalmente porque ele pode ser alterado pelos usuários quando / se arrastarem as caixas.

Eu gosto de fazer coisas 'com' wordpress (geralmente compensa), rathe do que colidir com ele e da maneira que o wordpress faz é o seguinte:

O wordpress armazena as posições arrastadas por usuário por tela e há várias teclas meta de usuário que ele usa, dependendo da página / tela em que está.

Portanto, você pode adicionar uma ação ou filtro para cada novo usuário para definir a configuração do usuário da maneira que deseja que o padrão seja.
1) Arraste e organize a página que você deseja afetar; em seguida, 2) procure no phpmyadmin na meta-usuário por seu ID e veja o que o wp armazenou lá. 3) codifique a nova ação do usuário da seguinte forma: se um usuário NÃO tiver essa configuração já definida (para evitar a substituição de uma opção pessoal), você poderá defini-la da maneira que desejar - com o valor encontrado ao defini-la manualmente.

Para ter uma idéia das meta-metas de usuários que você está procurando, consulte estas capturas de tela: http://wpusersplugin.com/related-plugins/amr-user-templates/screenshots-for-user-templates/

(Acabei escrevendo um plug-in genérico para que eu pudesse, como administrador, definir meu layout preferido para todos os usuários para todos os tipos de páginas / telas. Depois, eles poderiam alterar isso, por exemplo, à medida que se tornassem mais proficientes. Também não será interrompido quando o wp mudar o plug-in coisas como eu apenas busca os valores de usuário do modelo, nem tenta definir o valor para um valor codificado.)


1
Embora eu goste da idéia por trás dessa abordagem, a solução do Milo parece muito mais rápida, então, em vez disso, vou tentar, mas obrigado por dedicar um tempo para me informar sobre essa abordagem também. Definitivamente, vou usar essa maneira posteriormente. Eu atualizei seu comentário.
Mr.Brown

3
O plug-in proposto pela Anmari é um plug-in comercial pago ... e não parece atualizado desde agosto do ano passado. Você ainda está mantendo esse plugin? Caso contrário, você já pensou em compartilhá-lo no Github?
Unfulvio

Obrigado @anmari por compartilhar essa abordagem, realmente útil.
Maor Barazany

0

Se você deseja encomendar com precisão suas meta boxes, pode usar este plugin: https://wordpress.org/plugins/post-meta-box-order/

Ele é reproduzido na meta-box-order_post da opção do usuário (tabela wp_usermeta).

Nota 1: essa técnica pode ser aplicada a qualquer CPT personalizado alterando o final do sinalizador: meta-box-order_ [YOUR_CPT]

Nota 2: não esqueça de alterar o hash no código do plug-in para aplicar seu novo pedido a todos os usuários existentes.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.