保存循环中生成的元框复选框中的数据

时间:2017-02-15 17:37:09

标签: php wordpress loops post meta-boxes

我试图在Wordpress元框中保存动态生成的复选框中的数据。现在它几乎可以工作 - 但正如你可以看到每个复选框具有相同的名称和ID,以后将被使用,所以它不能像那样。

这是我创建复选框的方式:

    <?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', '' );
}

正如我所说它几乎可行 - 它可以保存所有名为&#34; meta-checkbox-two&#34; - 意味着一切,这不是目标。

这是我迷路的地方。我试图使每个名称和ID以循环检索的帖子ID结束。以下是代码的外观:

生成复选框:

    <?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;

但在第二种情况下,数据未保存。我做错了什么?

1 个答案:

答案 0 :(得分:0)

只需尝试下面的代码 - 未经测试但应该可以正常工作 - 我只是更改了数组上的输入名称,因为您可以看到name="meta-checkbox-two[]",这也是您所做的唯一输入ID。

<?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;
?>