Сохранение данных из флажков мета-боксов, сгенерированных в цикле

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

Вот как я создаю флажки:

    <?php
            $args = array( 'post_type' => 'teachers');
            $loop = new WP_Query( $args );
            while ( $loop->have_posts() ) : $loop->the_post();
            ?>
            <label for="meta-checkbox-two">
                <input type="checkbox" name="meta-checkbox-two" id="meta-checkbox-two" value="yes" <?php if ( isset ( $prfx_stored_meta['meta-checkbox-two'] ) ) checked( $prfx_stored_meta['meta-checkbox-two'][0], 'yes' ); ?> />
                <?php the_title() ?>
            </label>
    <?php endwhile; ?>

А вот и экономия:

// Checks for input and saves
if( isset( $_POST[ 'meta-checkbox-two' ] ) ) {
   update_post_meta( $post_id, 'meta-checkbox-two', 'yes' );
} else {
   update_post_meta( $post_id, 'meta-checkbox-two', '' );
}

Как я уже сказал, это почти работает — он сохраняет все, что называется «мета-флажок-два», то есть все, что не является целью.

Здесь я теряюсь. Я пытаюсь сделать так, чтобы каждое имя и идентификатор заканчивались идентификатором сообщения, которое извлекает цикл. Вот как тогда выглядит код:

Генерация флажков:

    <?php
            $args = array( 'post_type' => 'teachers');
            $loop = new WP_Query( $args );
            while ( $loop->have_posts() ) : $loop->the_post();
            ?>
            <label for="meta-checkbox-two">
                <input type="checkbox" name="meta-checkbox-<?php the_ID() ?>" id="meta-checkbox-<?php the_ID() ?>" value="yes" <?php if ( isset ( $prfx_stored_meta['meta-checkbox-' . the_ID()] ) ) checked( $prfx_stored_meta['meta-checkbox-'] . the_ID(), 'yes' ); ?> />
                <?php the_title() ?>
            </label>
    <?php endwhile; ?>

Сохранение их:

$args = array( 'post_type' => 'teachers');
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();

// Checks for input and saves
if( isset( $_POST[ 'meta-checkbox-'.the_ID()] ) ) {
    update_post_meta( $post_id, 'meta-checkbox-'.the_ID(), 'yes' );
} else {
    update_post_meta( $post_id, 'meta-checkbox-'.the_ID(), '' );
}
endwhile;

Но во втором случае данные не сохраняются. Что я делаю не так?


person oneday    schedule 15.02.2017    source источник


Ответы (1)


Просто попробуйте приведенный ниже код - не тестировался, но должен работать - я просто изменил имя ввода в массиве, как вы можете видеть name="meta-checkbox-two[]", и в этом смысл также сделал уникальный идентификатор ввода, как и вы.

<?php
    $args = array( 'post_type' => 'teachers');
    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();
    ?>
        <label for="meta-checkbox-two">
            <input type="checkbox" name="meta-checkbox-two[]" id="meta-checkbox-two-<?php the_ID() ?>" value="yes" <?php if ( isset ( $prfx_stored_meta['meta-checkbox-two'] ) ) checked( $prfx_stored_meta['meta-checkbox-two'][0], 'yes' ); ?> />
            <?php the_title() ?>
        </label>
<?php   
    endwhile;
?>
person mattkrupnik    schedule 16.02.2017