我有多个单选按钮设置在一个自定义帖子类型的元框内。我创建了这样的元盒:
add_action(\'admin_init\', \'add_meta_boxes\', 1);
function add_meta_boxes() {
add_meta_box( \'repeatable_fields\', \'Top 10 Movie List\', \'repeatable_meta_box_display\', \'cpt_top_ten_list\', \'normal\', \'default\');
}
function repeatable_meta_box_display() {
global $post;
$repeatable_fields = get_post_meta($post->ID, \'repeatable_fields\', true);
wp_nonce_field( \'repeatable_meta_box_nonce\', \'repeatable_meta_box_nonce\' );
if ( $repeatable_fields ) :
// set a variable so we can append it to each row
$num = 0;
$second_num = 0;
foreach ( $repeatable_fields as $field ) {
$num++;
<div class=" playbackformat-holder-<?php echo $num; ?> playbackformat-holder">
<form id="playback-form-<?php echo $num; ?>">
<label for="dvd-<?php echo $num; ?>">
<input type="radio" class="playbackformat-holder-radiobutton" value="dvd" name="playback_format[<?php echo $second_num; ?>]" id="dvd-<?php echo $num; ?>" <?php if($field[\'playback_format\'] == \'dvd\') { echo \'checked\'; } ?>>DVD
</label>
<label for="bluray-<?php echo $num; ?>">
<input type="radio" class="playbackformat-holder-radiobutton" value="bluray" name="playback_format[<?php echo $second_num; ?>]" id="bluray-<?php echo $num; ?>" <?php if($field[\'playback_format\'] == \'bluray\') { echo \'checked\'; } ?>>Bluray
</label><br>
<label for="3d-<?php echo $num; ?>">
<input type="radio" class="playbackformat-holder-radiobutton" value="3d" name="playback_format[<?php echo $second_num; ?>]" id="3d-<?php echo $num; ?>" <?php if($field[\'playback_format\'] == \'3d\') { echo \'checked\'; } ?>>3d
</label><br />
</form>
</div>
second_num++;
}
这是我的save函数,用于将数据存储到数组中。add_action(\'save_post\', \'repeatable_meta_box_save\', 10, 2);
function repeatable_meta_box_save($post_id) {
if ( ! isset( $_POST[\'repeatable_meta_box_nonce\'] ) ||
!wp_verify_nonce( $_POST[\'repeatable_meta_box_nonce\'], \'repeatable_meta_box_nonce\' ) )
return;
if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)
return;
if (!current_user_can(\'edit_post\', $post_id))
return;
$old = get_post_meta($post_id, \'repeatable_fields\', true);
$new = array();
$playbackFormats = $_POST[\'playback_format\'];
$count = count( $names ) - 1;
for ( $i = 0; $i < $count; $i++ ) {
// currently only storing the last stored radio value
$new[$i][\'playback_format\'] = $playbackFormats[$i];
// save movie description
// and however you want to sanitize
if ( !empty( $new ) && $new != $old ) {
update_post_meta( $post_id, \'repeatable_fields\', $new );
} elseif ( empty($new) ) {
delete_post_meta( $post_id, \'repeatable_fields\', $old );
}
}
我面临的问题是,假设我有三排。如果将第一个设置为DVD,第二个设置为bluray,第三个设置为3D,则最后一个值存储为3D。所有其他[\'playback_format\']
存储为“null”。按照我的设置方式,似乎应该妥善保存。这是一个精简版。我有正确存储的输入字段,但单选按钮一直是一个主要问题。
看起来我的保存功能应该存储[\'playback_format\']
在数组中的适当位置。但只有一家商店。我已经让它为所有三行存储相同的值,但无法为每一行获取唯一的值,也不知道为什么。
任何帮助都将不胜感激,因为这是拼图的最后一块!
谢谢(下面的屏幕截图提供了视觉帮助)
以下是var_dump($field);
将数据存储在上面的屏幕截图中之后。
array(4) {
["name"]=> string(116) "http://onecinephile.staging.wpengine.com/wp-content/uploads/2014/01/lon-chaney-phantom-hunchback-penalty-300x280.jpg"
["select"]=> string(14) "Test #2"
["url"]=> string(35) "Testing movie description #2"
["playback_format"]=> string(3) "dvd"
}
array(4) {
["name"]=> string(103) "http://onecinephile.staging.wpengine.com/wp-content/uploads/2014/01/spencer-tracy-boys-town-300x225.jpg"
["select"]=> string(14) "Test #1"
["url"]=> string(35) "Testing movie description #1"
["playback_format"]=> NULL
}
array(4) {
["name"]=> string(100) "http://onecinephile.staging.wpengine.com/wp-content/uploads/2014/01/Ronald-and-Madeleine-225x300.jpg" ["select"]=> string(14) "Test #3
["url"]=> string(35) "Testing movie description #3"
["playback_format"]=> NULL
}