¿Cómo puedo evitar volver a inventar la rueda Custom Fields en el Metabox de mi Plugin?

4

Aquí está el escenario:

En mi complemento, quiero que aparezca un metabox en el editor de publicación / página.

Quiero que el metabox sea exactamente igual que el metabox de "Campos personalizados" de WordPress, (Agregar otro, eliminar, actualizar, menú desplegable auto-rellenado, ingresar un nuevo enlace, magia AJAX, etc.); con un par de diferencias menores:

  • En lugar de solo 'Nombre' y 'Valor', quiero 'Objetivo', 'Nombre' y 'Valor'

  • En lugar de guardarlos todos como campos personalizados "públicos" que aparecen automáticamente dentro del metabox de Campos personalizados de WP, quiero que todos se almacenen como una única matriz multidimensional dentro de un campo "privado", espacio de nombre, ... es decir , _myplugin_custom_fields = array( 1 => array( 'target' => 'mytarget1', 'name' => 'myname1', 'value' => 'myvalue1' ), 2 => array( 'target' => 'mytarget2', 'name' => 'myname2', 'value' => 'myvalue2' ) )

He pasado todo el día hurgando en la red enredada de WP Core, y no he podido encontrar una forma sencilla de lograrlo. Si avanzo según mi comprensión actual, terminaré duplicando cientos de líneas de código central de numerosos archivos php y js.

¿Alguien aquí en WordPress Answers-land me puede ayudar en la dirección correcta? Tengo mucha experiencia en agregar y aprovechar metaboxes dentro de temas y complementos, pero este me tiene totalmente perplejo.

Por favor, hable si no estoy seguro.

¡Gracias de antemano a todos los que respondieron!

    
pregunta SethMerrick 02.03.2011 - 18:25

3 respuestas

2

La respuesta corta es que no hay una forma sencilla de hacerlo, ya que el metabox del campo personalizado no se escribió teniendo en cuenta la extensibilidad.

Puede agregar el campo adicional usando JavaScript y secuestrar el botón Agregar para enviar los datos a su controlador AJAX personalizado que los almacenará como desee.

    
respondido por el scribu 01.07.2011 - 12:48
0

Estoy guardando mis campos personalizados con el nombre _meta_whatever . Al comenzar el nombre con un guión bajo, se detiene a WordPress mostrando los campos personalizados en el cuadro desplegable en las publicaciones normales.

Para guardar en una matriz, estoy usando un 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 los meta-valores, este es mi código que estoy usando

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

Ahora tengo una matriz de ascoziative $meta donde el nombre de la clave se encuentra entre paréntesis en el atributo id -Atributo del elemento input .

Para guardar estoy usando un código como este

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

Por lo tanto, se guarda como un registro en wp_postsmeta

Espero que esto ayude y se exprese claramente desde mi lado?

    
respondido por el Guru 2.0 02.03.2011 - 20:04
0

Parece que estamos trabajando en cosas similares. No estoy seguro de si esto ayudará, pero puede darle algunas otras ideas.

primera de las tres partes del blog: enlace

Espero que ayude!

    
respondido por el NotLostJustHiking 02.05.2011 - 01:03

Lea otras preguntas en las etiquetas