Meta Boxes condicionais

Estou criando várias checkboxs metálicas no WordPress, e eu quero que o usuário possa ativar ou desativar determinadas checkboxs.

Então, eles clicam em um botão de opção (em uma checkbox de meta separada), atualizam as opções e uma checkbox de meta adicional anexada a esse valor de rádio aparecerá.

Então, basicamente, ele vai de uma checkbox de meta (a checkbox de seletor) para duas checkboxs meta (a checkbox de seleção e a nova checkbox que acabaram de selecionar).

No meu código, você pode criar uma meta checkbox configurando algo assim (esta é a checkbox de rádio onde o usuário seleciona para outras metadames para ativar / desativar):

// Create meta box that gives user ability to select additional meta box, which will then show upon saving the post $meta_boxes[] = array( 'id' => 'meta_box_id', 'title' => 'Box title', 'pages' => array('page'), 'context' => 'side', 'priority' => 'low', 'fields' => array( array( 'name' => 'Select:', 'id' => $prefix . 'meta_box_id', 'type' => 'radio', 'options' => array( array('name' => 'Value 1', 'value' => 'value_one'), array('name' => 'Value 2', 'value' => 'value_two'), ) ) ) ); 

Aqui está o que parece no WordPress:

http://img.flipwordpress.com/metabox/xR69s.png

E aqui está outra checkbox de meta que, uma vez selecionada na checkbox de meta acima (digamos que value_one está selecionado), aparecerá na canvas da publicação:

 // This meta box will only show if 'value_one' is selected from the radio box above $meta_boxes[] = array( 'id' => 'standard_lead', 'title' => 'Standard Lead', 'pages' => array('page'), 'context' => 'normal', 'priority' => 'high', 'lead' => 'value_one', 'fields' => array( array( 'type' => 'text', 'id' => $prefix . 'standard_title', 'name' => 'Lead Title', 'desc' => 'The title of your Standard Lead', 'width' => '100' ), array( 'type' => 'textarea', 'id' => $prefix . 'standard_content', 'name' => 'Lead Content', 'desc' => 'The content of your Standard Lead (you can use HTML)', 'width' => '100' ) ) ); 

A peça importante desse código é a seguinte:

 'lead' => 'value_one', 

Meu plano era ter o valor [‘lead’] (do código da checkbox de metragem diretamente acima) para coincidir com o valor [‘value’] (da checkbox de meta do rádio), para que eles pudessem estar conectados e, em seguida, testar com um IF declaração para se certificar de que eles são iguais ao mesmo, e então exibir SOMENTE se ambos forem iguais a value_one.

A function abaixo é o que realmente adiciona as checkboxs meta ao WordPress. Dentro dessa function, tentei criar essa declaração IF para combinar esses dois juntos:

 if($this->_meta_box['value'] == $this->_meta_box['lead']) 

… mas não funciona, e não tenho certeza de como segmentar [‘valor’] como está nested em múltiplas matrizes (ou eu suponho, é o problema).

Aqui está a function completa:

 function add_meta_boxes() { $this->_meta_box['context'] = empty($this->_meta_box['context']) ? 'normal' : $this->_meta_box['context']; $this->_meta_box['priority'] = empty($this->_meta_box['priority']) ? 'high' : $this->_meta_box['priority']; foreach($this->_meta_box['pages'] as $page) { if($this->_meta_box['value'] == $this->_meta_box['lead']) { // adds meta box to WP add_meta_box($this->_meta_box['id'], $this->_meta_box['title'], array(&$this, 'show_meta_boxes'), $page, $this->_meta_box['context'], $this->_meta_box['priority']); } } } 

Espero que tenha explicado o que é o problema. Eu olhei por toda parte e tentei piratear algumas coisas, mas não tenho certeza se isso é um problema que eu posso resolver. Qualquer input sobre isso, ou um empurrão na direção certa seria uma enorme ajuda. Obrigado!

PS: Eu também estava pensando em fazer isso por meio de JS em vez disso, mas não sei por onde começar a partir daí.

Solutions Collecting From Web of "Meta Boxes condicionais"

Isso pode ser facilmente resolvido com jQuery, e tem a vantagem de feedback em tempo real.

Já abordei esta situação em algumas perguntas, então, em vez de passar por seu código e escrever as funções adequadas, sugiro que você passe pelo meu código e adapte-o às suas necessidades.

  • Meta conteúdo nas páginas solicitadas
    (usado em Páginas, verifica a página principal e mostra / esconde a meta checkbox da Imagem em Destaque de acordo com IDs definidas)
  • Como adicionar ou remover metabox cada página separadamente?
    (usado em Páginas para verificar o modelo da página e mostrar / ocultar a checkbox meta da Imagem em Destaque, e usado na verificação de postagem para categorias selecionadas para mostrar / ocultar a meta checkbox FI)

Eu tentei com jQuery, mas o meu código é difícil de manter e não pode ser reutilizado, então eu levei várias horas para procurar um plugin e encontrou Meta Box Conditional Logic.

Para a sua checkbox de meta, se você usa a Lógica Condicional da Meta Box, basta atualizar seu código para:

 $meta_boxes[] = array( 'id' => 'standard_lead', 'title' => 'Standard Lead', 'pages' => array('page'), 'context' => 'normal', 'priority' => 'high', 'show' => array('lead', 'value_one'), 'fields' => array( array( 'type' => 'text', 'id' => $prefix . 'standard_title', 'name' => 'Lead Title', 'desc' => 'The title of your Standard Lead', 'width' => '100' ), array( 'type' => 'textarea', 'id' => $prefix . 'standard_content', 'name' => 'Lead Content', 'desc' => 'The content of your Standard Lead (you can use HTML)', 'width' => '100' ) ) ); 

Este é o link do plugin: https://metabox.io/plugins/meta-box-conditional-logic/