Como posso evitar reinventar a roda Custom Fields no Metabox do meu Plugin?

4

Este é o cenário:

No meu plug-in, quero que um metabox seja exibido no editor de postagem / página.

Eu quero que o metabox seja exatamente como o metabox do WordPress 'Custom Fields' (adicionar outro, excluir, atualizar, menu suspenso preenchido automaticamente, inserir novo link, magia AJAX, etc); com algumas pequenas diferenças:

  • Em vez de apenas "Nome" e "Valor", quero "Destino", "Nome" e "Valor"

  • Em vez de salvá-los todos como campos personalizados 'públicos' que aparecem automaticamente dentro do metabox Campos Personalizados do WP, quero que eles sejam armazenados como um único array multidimensional dentro de um campo 'private', namespaced ... _myplugin_custom_fields = array( 1 => array( 'target' => 'mytarget1', 'name' => 'myname1', 'value' => 'myvalue1' ), 2 => array( 'target' => 'mytarget2', 'name' => 'myname2', 'value' => 'myvalue2' ) )

Passei o dia todo vasculhando a emaranhada rede do WP Core e não consegui encontrar uma maneira direta de conseguir isso. Se eu seguir em frente com base no meu entendimento atual, acabarei duplicando centenas de linhas de código principal de vários arquivos php e js.

Alguém aqui na ajuda do WordPress Answers-land pode me apontar na direção certa? Eu tenho muita experiência em adicionar e alavancar metaboxes dentro de temas e plugins, mas este me deixou perplexo.

Por favor, fale se não estou claro.

Agradecemos antecipadamente a todos que responderem!

    
por SethMerrick 02.03.2011 / 18:25

3 respostas

2

A resposta curta é que não é nenhuma maneira simples de fazer isso, já que o campo personalizado do metabox não foi escrito com a extensibilidade em mente.

Você pode adicionar o campo adicional usando JavaScript e sequestrar o botão Adicionar para enviar os dados ao seu manipulador AJAX personalizado que os armazenaria como você deseja.

    
por scribu 01.07.2011 / 12:48
0

Estou salvando meus campos personalizados com o nome _meta_whatever . Iniciando o nome com um sublinhado, interrompe o WordPress mostrando os campos personalizados na caixa suspensa nos posts normais.

Para salvar em uma matriz, estou usando um código HTML como este.

...
<input type="text" class="short" name="_events_meta[startDate]" id="_events_meta[startDate]" value="<?php if(!empty($meta['startDate'])) echo $meta['startDate']; ?>"/>
<input type="text" class="extrashort" name="_events_meta[startTime]" id="_events_meta[startTime]" value="<?php if(!empty($meta['startTime'])) echo $meta['startTime']; ?>"/>
...

Para recuperar os meta-valores, este é o meu código que estou usando

...
$meta = get_post_meta($post->ID,'_events_meta',TRUE);
...

Agora, tenho uma matriz assoziative $meta em que o nome da chave é fornecido entre colchetes no atributo id do input -Element.

Para salvar, estou usando um código como este

...
$new_data = $_POST['_events_meta'];
...
add_post_meta($post_id,'_events_meta',$new_data,TRUE);
...

Por isso, é salvo como um registro em wp_postsmeta

Espero que isso ajude e seja claramente expresso do meu lado?

    
por Guru 2.0 02.03.2011 / 20:04
0

Parece que estamos trabalhando em coisas semelhantes. Não tenho certeza se isso vai ajudar, mas pode lhe dar outras idéias.

1º de três postagens no blog - enlace

Espero que ajude!

    
por NotLostJustHiking 02.05.2011 / 01:03