Значения метабокса не сохраняются - PullRequest
0 голосов

У меня проблемы с сохранением данных из созданного мной метабокса. Этот метабокс позволяет создавать новые формы, нажимая кнопки «adicionar dia» и «adicionar local».

Ниже приведен полный код функции, которая сохраняет данные метабокса (я полагаю, что ошибка в эта функция), а также части кода функции, которая создает метабокс (я не поместил весь код, потому что он слишком большой).

Я ценю любую помощь

<?php
//save
add_action('save_post', 'save_regular_post_meta', 1);
function save_regular_post_meta($post_id){
    // verify nonce  
    if ( isset($_POST['regular_cpt_nonce']) && !wp_verify_nonce( $_POST['regular_cpt_nonce'], basename(__FILE__) ) ) return;
    // check autosave  
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    // check permissions and verify if this is our post type saving.
    if ( get_post($post_id)->post_type != 'regular' ) {
        return;
    } elseif (!current_user_can('edit_post', $post_id)) { 
        return;
    }

    $meta_data = array(
        'Local' => array(
            'value' => isset($_POST['locais']),
            'name' => 'locais'
        )
    );

    $lista_de_locais = $meta_data['Local']['value'];
    if ( is_array($lista_de_locais) && !empty($lista_de_locais) ) {
        sort($lista_de_locais);
        if ( is_array($lista_de_locais['horarios']) && !empty($lista_de_locais['horarios']) ) {
            sort($lista_de_locais['horarios']);
        }
    }

    foreach ($meta_data as $data) {
        update_post_meta($post_id, $data['name'], $data['value']);
    }
}
?>

Это часть кода функции, которая создает метабокс

<?php 
function regular_get_post_meta_turmas() {
    global $post;

    $locais = get_post_meta($post -> ID, 'locais', false);

    $fields = array(
        'local' => 'Nome do local',
        'endereco' => 'Endereço',
    );

    $horariosfields = array(
        'dias',
        'hora_i',
        'hora_f'
    );

    $dayfields = array(
        'seg' => '0seg',
        'ter' => '1ter',
    );

    $local_count = 0;
    $days_count = array();

    ?><ol>
    <?php foreach ( (array)$locais as $local ) { ?>
        <li>
            <fieldset class="field locais"><label>Local de Evento</label>
                <table class="info">
                    <?php foreach ($fields as $name => $label) { ?>
                        <tr>
                            <td>
                                <label for="local_<?php echo $local_count; ?>_<?php echo $name; ?>"><?php echo $label; ?></label>
                            </td>
                            <td>
                                <input
                                    id="local_<?php echo $local_count; ?>_<?php echo $name; ?>"
                                    type="text"
                                    name="locais[<?php echo $local_count; ?>][<?php echo $name; ?>]"
                                    value="<?php if ( (!empty($local)) && (is_array($local)) ) echo $local[$name]; ?>"
                                    class="<?php echo $name; ?>">
                            </td>
                        </tr>
                    <?php } ?>
                </table>

                <?php $days_count[$local_count] = 0; ?>

                <?php if ( (!empty($local)) && (is_array($local)) ) { ?>
                    <?php foreach ( (array)$local['horarios'] as $date_and_time ) { ?>
                        <fieldset class="field locais-horario-dia"><label>Dias da semana / Horário</label>
                            <table class="days">
                                <tr>
                                    <td>
                                        <label for="local_<?php echo $local_count; ?>_horarios_<?php echo $days_count[$local_count]; ?>_dia">Dias da semana</label>
                                    </td>
                                    <td>
                                        <?php foreach ( $dayfields as $name => $value ) { ?>
                                            <div class="checkbox"><input
                                                id="local_<?php echo $local_count; ?>_horarios_<?php echo $days_count[$local_count]; ?>_dia_<?php echo $name; ?>"
                                                type="checkbox"
                                                name="locais[<?php echo $local_count; ?>][horarios][<?php echo $days_count[$local_count]; ?>][dias][<?php echo $name; ?>]"
                                                value="<?php echo $value; ?>"
                                                <?php if ( isset($date_and_time['dias'][$name]) && $value == $date_and_time['dias'][$name] ) echo 'checked'; ?>
                                            ><label for="local_<?php echo $local_count; ?>_horarios_<?php echo $days_count[$local_count]; ?>_dia_<?php echo $name; ?>"><?php echo $name; ?></label></div>
                                        <?php } ?>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <label for="local_<?php echo $local_count; ?>_horarios_<?php echo $days_count[$local_count]; ?>_hora_i">Horário de início</label>
                                    </td>
                                    <td>
                                        <input 
                                            id="local_<?php echo $local_count; ?>_horarios_<?php echo $days_count[$local_count]; ?>_hora_i"
                                            type="text"
                                            name="locais[<?php echo $local_count; ?>][horarios][<?php echo $days_count[$local_count]; ?>][hora_i]"
                                            value="<?php echo $date_and_time['hora_i']; ?>"
                                            class="hora_i"
                                        >
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <label for="local_<?php echo $local_count; ?>_horarios_<?php echo $days_count[$local_count]; ?>_hora_f">Horário de término</label>
                                    </td>
                                    <td>
                                        <input
                                            id="local_<?php echo $local_count; ?>_horarios_<?php echo $days_count[$local_count]; ?>_hora_f"
                                            type="text"
                                            name="locais[<?php echo $local_count; ?>][horarios][<?php echo $days_count[$local_count]; ?>][hora_f]"
                                            value="<?php echo $date_and_time['hora_f']; ?>"
                                            class="hora_f"
                                        >
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <button class="btn del_day">Remover dia</button>
                                    </td>
                                </tr>
                                <?php $days_count[$local_count] += 1; ?>
                            </table>
                        </fieldset>
                    <?php } ?>
                <?php } ?>
                <button class="btn add_day" index="<?php echo $local_count; ?>">Adicionar dia</button>
                <button class="btn del_local">Remover local</button>
            </fieldset>
        </li>
        <?php $local_count += 1; ?>
    <?php } ?>
    </ol>
    <button class="btn add_local">Adicionar local</button>

    <?php
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...