Cómo evitar reinventar los campos personalizados en el Metabox de mi Plugin

2 mar 2011, 17:25:59
Vistas: 322
Votos: 4

Este es el escenario:

En mi plugin, quiero que aparezca un metabox en el editor de entradas/páginas.

Quiero que el metabox sea -exactamente- como el metabox de 'Campos Personalizados' de WordPress (Agregar otro, eliminar, actualizar, dropdown auto-completado, enlace para nuevo, 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 almacenarlos todos como un único array multidimensional dentro de un campo 'privado' con namespace... 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 revisando la maraña del núcleo de WP, y no he podido encontrar una manera directa de lograr esto. Si avanzo según mi entendimiento actual, terminaré duplicando cientos de líneas de código del núcleo de numerosos archivos php y js.

¿Alguien aquí en WordPress Answers puede ayudarme a encontrar la dirección correcta? Tengo bastante experiencia añadiendo y utilizando metaboxes en temas y plugins, pero este me tiene totalmente perplejo.

Por favor avísame si no estoy siendo claro.

¡Gracias de antemano a todos los que respondan!

0
Todas las respuestas a la pregunta 3
0

La respuesta corta es que no hay una forma sencilla de hacer esto, ya que el metabox de campos personalizados no fue escrito pensando en la extensibilidad.

Podrías agregar el campo adicional usando JavaScript y capturar el botón "Añadir" para enviar los datos a tu manejador AJAX personalizado que los almacenaría como desees.

1 jul 2011 10:48:29
2

Estoy guardando mis campos personalizados con el nombre _meta_loquesea. Al comenzar el nombre con un guión bajo, evito que WordPress muestre los campos personalizados en el menú desplegable de las entradas normales.

Para guardar en un array estoy usando 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 valores meta, este es el código que uso:

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

Ahora tengo un array asociativo $meta donde el nombre de la clave está dado entre corchetes en el atributo id del elemento input.

Para guardar uso código como este:

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

Así se guarda como un único registro en wp_postsmeta

¿Espero que esto ayude y esté claramente expresado de mi parte?

2 mar 2011 19:04:38
Comentarios

Gracias por el aporte, pero no es exactamente lo que estoy buscando. Estoy familiarizado con cómo hacer esa parte (como se muestra en mi segundo punto), pero lo principal que busco aquí es cómo básicamente duplicar el Metabox de Campos Personalizados -Y- agregar un tercer campo (Target) -Y-, después de duplicar el Metabox de Campos Personalizados, meter todos mis valores en un array. Creo que si logro resolver el primer punto, podré determinar fácilmente cómo organizar mi array. ¡Gracias nuevamente por tomarte el tiempo de contribuir!

SethMerrick SethMerrick
2 mar 2011 20:05:53

@SethMerrick: Disculpa por malinterpretar tu pregunta. Ahora entiendo, pero es un camino realmente difícil de seguir ;-)

Guru 2.0 Guru 2.0
2 mar 2011 20:09:33
0

Parece que estamos trabajando en cosas similares. No estoy seguro si esto te ayudará pero quizá te dé otras ideas.

Primera parte de una serie de tres posts en el blog - http://www.deluxeblogtips.com/2010/05/howto-meta-box-wordpress.html

¡Espero que te sea útil!

1 may 2011 23:03:06