Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Meta Box não salva informações

Criei dois itens numa meta box para um custom type. Porém, quando vou exibir na view, ele aparece como NULL, e o var_dump da $schedule_meta_data mostra que ele nem existe lá. Seguem códigos:

<?php
// Register and save metabox informations

    function register_schedule_meta_boxes() {
  add_meta_box(
    'info_schedule',
    'Horários',
    'info_schedule_view',
    'programa',
    'normal',
    'high'
  );
}
add_action('add_meta_boxes','register_schedule_meta_boxes');

// get_post_meta pega as meta informacoes do post dado
function info_schedule_view($post ) {
    $schedule_meta_data = get_post_meta( $post->ID ); ?>

    <div class="radio-metabox">
        <div class="radio-metabox-item">
            <label for="radio-start-input">Horário de início:</label>
            <input id="radio-start-input" class="radio-metabox-input" type="text" name="start_id" value="<?= $schedule_meta_data['start_id'][0]; ?>">
        </div>
        <div class="radio-metabox-item">
            <label for="radio-end-input">Horário de fim:</label>
            <input id="radio-end-input" class="radio-metabox-input" type="text" name="end_id" value="<?= $schedule_meta_data['end_id'][0]; ?>">
        </div>
    </div>
<?php
}

// Salvar informações dos metaboxes criados com a funcao update_post_meta e limpar erros de escrita com sanitize_text_field
function save_meta_info_schedule( $post_id ) {
    if( isset($_POST['start_id']) ) {
        update_post_meta( $post_id, 'start_id', sanitize_text_field( $_POST['start_id'] ) );
    }
    if( isset($_POST['end_id']) ) {
        update_post_meta( $post_id, 'end_id', sanitize_text_field( $_POST['end_id'] ) );
    }
}
add_action('save_post', 'save_meta_info_schedule');
?>
// show in the view
<?php
    $args = array(
            'post_type' => 'programa',
            'posts_per_page' => 6
      );

      $schedule = new WP_Query( $args );
      $schedule_meta_data = get_post_meta( $post->ID );      
    ?>

    <div class="tab-content">
      <div id="<?= $taxonomy->slug; ?>" class="tab-pane fade in active">
        <div class="row">
          <?php if ($schedule->have_posts()) : while ($schedule->have_posts()) : $schedule->the_post(); ?>
          <div class="col-md-4">
            <div class="schedule" data-image="">
              <div class="schedule-text">
                <h3><?php the_title(); ?></h3>
                <h2 class="textFront"><?php echo $schedule_meta_data['start_id'][0]; ?>h - <?php echo $schedule_meta_data['end_id'][0]; ?>h</h2>
                <h4 class="textBack"><?php the_content(); ?></h4>
              </div>
            </div>
          </div>
          <?php
            endwhile; else: endif;
            wp_reset_query();
          ?>
        <!-- /row -->
        </div>
      <!-- /tab -->
      </div>
    <!-- /tab-content -->

Agradeço desde já, Amanda Tavares.

2 respostas
solução!

Oi Amanda, tudo bem? Você tentou recuperar o valor individual do seu campo ao invés de ficar acessando posição de array manualmente? O get_post_meta suporta isso, semelhante ao que você faz com o update_post_meta.

Deu certo! Mudei o código para:

<h2 class="textFront"><?= get_post_meta( $post->ID, 'start_id',true ) ?>h - <?= get_post_meta( $post->ID, 'end_id', true ); ?>h</h2>

Acho que ele não estava reconhecendo o $post->id, pois isso só funciona dentro do Loop. Obrigada!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software