Custom Fields dinámicas no se guardan
-
Buenos días compañeros!
Necesito para una página poder duplicar un conjunto de ‘Custom Field’ para que el usuario pueda insertar varias direcciones, tras buscar bastante y no encontrar nada que me sirva para lo que quiero he decidio hacerlo yo mismo, pero tengo un problema:
Los campos se me generan perfectamente y se me guardan pero a la hora de guardarlos no se guardan y no se que puede estar pasando, si me podéis echar una mano os lo agradezco!!
Tengo un campo para guardar cuantas direcciones quiere y al guardar lo detecta el bucle a través del valor del input y los genera.
Os dejo el código aquí debajo:
//GENERAR CAMPOS
<?php
add_action(‘admin_init’, ‘profesional_meta_boxes’);
function profesional_meta_boxes() {
add_meta_box( ‘profesional-meta-box’, __(‘Datos de Interés’), ‘profesional_meta_box_callback’, ‘profesionales’, ‘normal’, ‘high’, array( ‘arg’ => ‘value’) );
}
// datos internos en el metabox
function profesional_meta_box_callback( $post ) {
//El nonce es opcional pero recomendable. Vea http://codex.wordpress.org/Function_Reference/wp_nonce_field
wp_nonce_field( ‘profesionales_meta_box’, ‘profesionales_meta_box_noncename’ );//Obtenermos los meta data actuales para rellenar los custom fields
//en caso de que ya tenga valores
$post_meta = get_post_custom($post->ID);
?><?php
//Número de direcciones
$current_value = ‘1’;
if( isset( $post_meta[‘num-direction’][0] ) ) {
$current_value = $post_meta[‘num-direction’][0];
}
?>
<div style=»width: 100%; display: inline-block; vertical-align: top;»>
<p>Número de direcciones</p>
<p style=»width: 100%»>
<?php
$value_dir = $current_value;
?>
<input class=»num-direction» name=»num-direction» type=»text» readonly value=»<?php echo $current_value; ?>»>
<button class=»add-direction»>+</button>
<button class=»remove-direction»>-</button>
<script src=»https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.js»></script>
<script>
$(‘.add-direction’).on(‘click’, function(ev) {
ev.preventDefault();
var val_dir = $(‘.num-direction’).val();
val_dir++;
$(‘.num-direction’).val(val_dir);
});
$(‘.remove-direction’).on(‘click’, function(ev) {
ev.preventDefault();
var val_dir = $(‘.num-direction’).val();
val_dir–;
$(‘.num-direction’).val(val_dir);
});
</script></p>
</div>
<?php for ($i=1; $i <= $value_dir; $i++) { ?><div style=»border: 2px solid #ededed;padding: 20px;margin: 20px 0;»>
<h2 style=»padding: 0 0 15px 0; font-weight: bold;»>Dirección <?php echo $i; ?></h2><?php
//DESCRIPCIÓN
$name_desc_zona_trabajo = ‘desc-zona-trabajo’.$i;
$current_value = »;
if( isset( $post_meta[‘$name_desc_zona_trabajo’][0] ) ) {
$current_value = $post_meta[‘$name_desc_zona_trabajo’][0];
}
?>
<div style=»width: 45%; display: inline-block; vertical-align: top;clear:;»>
<p>Descripción zona de trabajo</p>
<p style=»width: 100%; display: inline-block;»>
<textarea style=»width: 90%;» name=»<?php echo $name_desc_zona_trabajo ?>» cols=»30″ rows=»10″><?php echo $current_value; ?></textarea>
</p>
</div>
</div><?php } ?>
<?php
}
//GUARDAR CAMPOS
<?php
add_action(‘save_post’, ‘profesional_save_custom_fields’);
function profesional_save_custom_fields($post_id){
// Primero comprobamos que el usuario actual tenga permiso para editar el post
if ( isset($_POST[‘post_type’]) && ‘post’ == $_POST[‘post_type’] ) {
if ( !current_user_can( ‘edit_post’, $post_id ) ) {
return;
}
}// Segundo, comprobamos el nonce como medida de seguridad
if ( !isset( $_POST[‘profesionales_meta_box_noncename’] ) || ! wp_verify_nonce( $_POST[‘profesionales_meta_box_noncename’], ‘profesionales_meta_box’ ) ) {
return;
}//Num direction
if( isset($_POST[‘num-direction’]) && $_POST[‘num-direction’] != «» ) {
update_post_meta( $post_id, ‘num-direction’, sanitize_text_field( $_POST[‘num-direction’] ) );
//OBTENGO EL VALOR DE EL NUMERO DE DIRECCIONES PARA EL BUCLE
$value_dir = $_POST[‘num-direction’];
} else {
$value_dir = $_POST[‘num-direction’];
//$_POST[‘text_meta_field’] no tiene valor establecido, eliminar el meta field de la base de datos
if ( isset( $post_id ) ) {
delete_post_meta($post_id, ‘num-direction’);
}
}//BUCLE PARA GUARDAR DINAMICAMENTE DEPENDIENDO DE LOS CAMPOS QUE CREE EL USUARIO
for ($i=1; $i <= $value_dir; $i++) {//Descripción Zona de Trabajo
//Nombre dependiendo de su posición
$name_desc_zona_trabajo = ‘desc-zona-trabajo’.$i;
if( isset($_POST[$name_desc_zona_trabajo]) && $_POST[$name_desc_zona_trabajo] != «» ) {
update_post_meta( $post_id, $name_desc_zona_trabajo, sanitize_text_field( $_POST[$name_desc_zona_trabajo] ) );
} else {
//$_POST[‘text_meta_field’] no tiene valor establecido, eliminar el meta field de la base de datos
if ( isset( $post_id ) ) {
delete_post_meta($post_id, $name_desc_zona_trabajo);
}
}
}}
?>
Saludos!
- El debate ‘Custom Fields dinámicas no se guardan’ está cerrado a nuevas respuestas.