• 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!

Viendo 1 respuesta (de un total de 1)
  • Iniciador del debate franhm.93

    (@franhm93)

    Solución!!!!

    En el apartado de generar los campos, como utilizo variables para crear los campos, tenía que quitarle las comillas que engloban la variable en el array:

    //DESCRIPCIÓN
    $name_desc_zona_trabajo = ‘desc-zona-trabajo’.$i;
    $current_value = »;
    —————— COMILLAS ———————-
    if( isset( $post_meta[$name_desc_zona_trabajo][0] ) ) {
    $current_value = $post_meta[$name_desc_zona_trabajo][0];
    ——————–

Viendo 1 respuesta (de un total de 1)
  • El debate ‘Custom Fields dinámicas no se guardan’ está cerrado a nuevas respuestas.