Hola,
Cita:
Iniciado por metacortex
Aunque el código trabaja bien, estaré pendiente de cualquier observación a lo mencionado.
No miraba la necesidad de insertar un campo que solamente te va a traer un indice secuencial, es decir, rc_referencia_datos, lo estas usando como un contador, y sabiendo con anterioridad que es un contador no vi que fuera necesario agregarlo.
Cita:
Iniciado por metacortex
Código PHP:
Ver originalfunction rc_submodelos($c = '0') {
$html ='
<fieldset id="bloque-1">
<input type="hidden" name="rc_referencia_datos[]" value="1" />
<p><input type="text" name="nombre_'. $c .'" value="" /></p>
<p><input type="text" name="descripcion_'. $c .'" value="" /></p>
<p><input type="text" name="precio_'. $c .'" value="" /></p>
</fieldset>';
return $html;
}
Quitando la referencia a esa variable quedaba algo así:
Código PHP:
function rc_submodelos($c = '0') {
$html ='
<fieldset id="bloque-' . $c . '">
<p><input type="text" name="nombre_'. $c .'" value="" /></p>
<p><input type="text" name="descripcion_'. $c .'" value="" /></p>
<p><input type="text" name="precio_'. $c .'" value="" /></p>
</fieldset>';
return $html;
}
Y en este momento solamente necesitas saber cual es el último campo:
Cita:
Iniciado por metacortex
Código PHP:
Ver original/*
$datos es un array general que controla todo. Puedo agregar
y quitar elementos sin problemas ni trabajo redundante.
Además los nombres de las claves en la BD salen de aquí
*/
$datos = array('nombre' , 'descripcion' , 'precio');
/*
get_post_meta() es una función de WordPress equivalente al
que devuelve un array de datos de la misma forma que un SELECT
los parámetros son: ('ID de la entrada' , 'campo a modificar' , 'return = true')
*/
$postmeta = get_post_meta($post->ID , '_rc_postmeta' , true);
if($postmeta) {
foreach($postmeta as $k => $v)
$html .= rc_submodelos('c='. $k);
else
$html .= rc_submodelos();
Por lo que solamente era necesario llevar un contador,
Código PHP:
$datos = array('nombre' , 'descripcion' , 'precio');
$postmeta = get_post_meta($post->ID , '_rc_postmeta' , true);
if($postmeta) {
$i = 1;
while (isset($postmeta["nombre_$i"])) {
$html .= rc_submodelos($i++);
}
else
$html .= rc_submodelos();
Cuando recoges los campos es muy parecido:
Cita:
Iniciado por metacortex
Código PHP:
Ver originalfunction rc_guardar_producto() {
global $post, $datos;
$postmeta = get_post_meta($post->ID , '_rc_postmeta' , true);
foreach($_POST['rc_referencia_datos'] as $clave => $valor) {
$datos_form[$clave] = array();
foreach($datos_editor as $c => $v)
$datos_form[$clave][$v] = isset($_POST['rc_datos_'. $v .'_'. $clave]) ?
$_POST['rc_datos_'. $v .'_'. $clave] : null; }
/*
update_post_meta() es una versión de WordPress
que abrevia el INSERT e incluye todos los dispositivos
de seguridad. Una delicia.
*/
update_post_meta( $post->ID, '_rc_postmeta', $datos_form );
die(); // Requerido por WordPress para ingresar datos vía Ajax }
Solamente usando el mismo contador, que había propuesto en el post anterior:
Código PHP:
function rc_guardar_producto() {
global $post, $datos;
$postmeta = get_post_meta($post->ID , '_rc_postmeta' , true);
$datos_form = array();
$i = 1;
while (isset($postmeta["nombre_$i"])) {
$temp = array();
foreach ($datos as $dato) {
$temp[$dato] = isset($_POST["rc_datos_$dato_$i"]) ? $_POST["rc_datos_$dato_$i"] : null;;
}
$datos_form[] = $temp;
$i++;
}
update_post_meta( $post->ID, '_rc_postmeta', $datos_form );
die(); // Requerido por WordPress para ingresar datos vía Ajax
}
Aunque no lo probé, porque no tengo wordpress a la mano, tendría que dar el mismo resultado, creo que solamente sería otra forma de hacer lo mismo. Algunos dicen que si ya te funciona no lo toques mas, así que solo lo escribí como referencia adicional.
Saludos,