Layout do MetaBox para todos os usuários

Eu estava pensando: você é um administrador: quando você reordena o layout de sua meta-checkbox, em uma página ou em uma postagem, este layout é salvo com seu perfil de usuário: por exemplo, arraste a checkbox de categoria antes da publicação checkbox…

É possível salvar este layout para outros usuários (editores, autores …)?

É possível organizar seu layout para todos os tipos de usuários, sem logar com sua conta?

Obrigado por você ajuda!

Solutions Collecting From Web of "Layout do MetaBox para todos os usuários"

Você poderia configurar um layout padrão diferente conectando em do_meta_boxes , veja aqui:

  • Como alterar a posição padrão das metadados WP?

Ou você poderia usar a variável global $wp_meta_boxes para fazê-lo:

  • Obter lista de meta checkboxs registradas e removê-las
  • Como remover certas opções de canvas e Meta checkboxs de adicionar / editar tipo de publicação?
  • Como configurar a posição da metabox wordpress
  • Dashboard Widgets API – Exemplo – Avançado: forçando seu widget no topo

Embora os últimos dois links sejam sobre widgets do painel, há poucas ou nenhuma diferença na forma como é feito para checkboxs de meta em canvass de edição. Fazê-lo com qualquer um dos methods seria, naturalmente, configurar isso de forma programática. Você ainda precisaria desativar o arrastar e deixar cair, acho.

Este é um esboço bruto, mas algo assim deve funcionar:

  1. Suponha que haja algum usuário “mestre” com uma ID de usuário conhecida – seu administrador ou um usuário criado para esse fim.
  2. Quando as checkboxs meta são exibidas, as configurações do usuário são verificadas para ver se as checkboxs foram movidas.
  3. Você pode interromper essa verificação com um filtro no get_user_option_{$option} .

Coloque isso em conjunto:

 function force_user_option_wpse_124330($option) { remove_filter('get_user_option_meta-box-order_post','force_user_option_wpse_124330'); return get_user_option('meta-box-order_post', 1); // 1 is the known user ID } add_filter('get_user_option_meta-box-order_post','force_user_option_wpse_124330'); 

Tenho sérias dúvidas sobre fazer isso em tudo. Isso poderia causar confusão para seus usuários. Mesmo que esse esboço de filtro funcione, ou você pode fazê-lo funcionar, eu consideraria desativar o arrasto da metabox para qualquer usuário, exceto o “mestre”.

Você terá que fazer algo muito parecido com outras páginas com meta-checkboxs que você deseja seqüestrar.

Você pode usar o comportamento de sorting de ordenar as metaboxes.

add_meta_box( $id, $title, $callback, $post_type, $context, $priority, $callback_args );

Há prioridades ( $priority ) para exibir. Minha Idéia é dar a todos a mesma prioridade, mas mantenha suas identidades de maneira ordenada.

Por exemplo: se eu quiser que * c_meta_box * seja exibido antes de * b_meta_box *, então irei registrar minhas meta checkboxs como essa.

 add_meta_box('a_c_meta_box','C META BOX','c_meta_box_cb','post','normal','default'); add_meta_box('b_b_meta_box','B META BOX','b_meta_box_cb','post','normal','default'); 

Aviso: Como eu alterei o id das checkboxs e adicionei a_ e b_ para classificá-los. Você também pode adicionar números. Dando a todos eles a mesma $priority mas identificação ordenada.

Eu sei que esta não é a solução perfeita, mas isso funciona nesse cenário.

Para a resolução de problemas, você pode usar esse código para ver os global $wp_meta_boxes como este:

 global $wp_meta_boxes; echo "
"; print_r($wp_meta_boxes); echo "

";

Referências adicionais: Widget API Codex

NOTA: Depois de fazer alterações em metaboxes existentes, pressione o botão Publicar uma vez para salvar os ID alterados da checkbox de meta.

Eu concordo que isso é uma espécie de má prática, já que você está tomando controle das mãos dos usuários e pode confundi-los, mas também entendo que muitos usuários não usam esse recurso e / ou são irremediavelmente ruins com a tecnologia e acabam aparecendo. até a interface para si (por exemplo, colapsando meta checkboxs … opção de usuário diferente para essa idéia, mas idêntica). Nós também sabemos que hardcoding esta coisa é uma prática ruim, mas às vezes você realmente precisa fazer essa merda:

 add_filter('get_user_option_meta-box-order_post', 'override_post_meta_box_order'); function override_post_meta_box_order($order) { $order['normal'] = "comma,separated,list,of,meta,boxes"; $order['side'] = "you,get,the,idea"; return $order; } 

Você pode descobrir quais valores usar aqui, espiando em seu database ou error_log(print_r($order,true)) ou seja o que for.

Um modo muito melhor seria obter esses valores de outra conta, como sua conta de administrador, que você pode usar para controlar e modificar a metabox order. A resposta do @ s_ha_dum é exatamente para isso, exceto que você obtém um loop infinito, pois cada chamada para get_user_option() passa pelo seu filtro, que por sua vez chama get_user_option() , etc … Você precisa ter um caso base, que verifica se o usuário solicitado é 1 e então retorna a opção do usuário. Você não pode simplesmente verificar get_current_user_id() pois isso ainda retornará o usuário atual visualizando a página, mesmo se você estiver chamando get_user_option('meta-box-order_post', 1) . Tenho certeza de que há uma maneira, mas olhando brevemente, não consegui descobrir como evitar esse loop infinito.

Na verdade, uma maneira de contorná-lo seria consultar diretamente $wpdb por esse valor em vez de usar a function WordPress get_user_option() .

EDITAR : Com o bug corrigido, a resposta do @ s_ha_dum é melhor, pois não codifica a ordem, mas permite que um usuário designado a controle: https://wordpress.stackexchange.com/a/124337/41534