Estou criando um widget, ele precisa armazenar cerca de 10 IDs. No momento, estou usando o seguinte método de campo para armazenar cada um dos IDs em um campo separado. Ele armazena os dados de cada campo em um separado no wordpress. É possível armazenar os dados de todos os campos em apenas uma linha no wordpress, por exemplo, usando uma matriz?
<input
class="widefat"
id="<?php echo $this->get_field_id('item1_id'); ?>"
name="<?php echo $this->get_field_name('item1_id'); ?>"
value="<?php echo $instance['item1_id']; ?>"
/>
<input
class="widefat"
id="<?php echo $this->get_field_id('item2_id'); ?>"
name="<?php echo $this->get_field_name('item2_id'); ?>"
value="<?php echo $instance['item2_id']; ?>"
/>
$instance
é uma matriz e contém todos os valores. E o que você quer dizer com 'armazenar os dados de todos os campos em apenas uma linha'? Você quis dizer uma linha do banco de dados?Respostas:
Você precisa coletar vários campos com o mesmo nome como este…
… E ajuste a lógica do seu widget para isso.
Aqui está um widget de demonstração muito simples:
Processo interno
A parte dianteira
fonte
printf
Sintaxe muito eleganteclass="widefat"
nos campos.A resposta acima é boa se você precisar que os campos sejam numerados. No meu caso, eu não fiz. Eu tenho um widget com opções que permitem ao usuário selecionar qualquer número de categorias a serem usadas no widget.
Aqui está o meu widget
form
. - Três coisas importantes aquiarray()
esteja vazio se o valor do widget não estiver definido<label>
name
atributo form , observe que eu anexo um[]
no final. Isso diz ao PHP que estou enviando uma matriz de valores para essa chave<label><input type="checkbox" ...></label>
. - Cada uma das nossas caixas de seleção não terá umid
atributo exclusivo ; portanto, o<label>
for
atributo não funcionará. Poderíamos gerar IDs únicos, mas isso é um aborrecimento. Se você apenas envolver o rótulo em torno da entrada, o rótulo será associado corretamente sem o incômodo de conectar ofor
botão +id
Agora o código
E aqui está a minha função de atualização
Estou interessado em salvar os IDs de categoria em uma matriz, que são números, portanto, uso
array_map
comintval
para garantir que todos os dados enviados sejam números inteiros válidos. Além disso, usoarray_filter
para remover envios inválidos.É particularmente desafiador descrever esse material do WordPress. Se você tiver alguma dúvida, ficarei feliz em elaborar.
fonte