код: http://wpbin.io/i7zwfo.
function add_column_meta_box() {
global $post, $column_meta_box_count, $count;
$column_meta_box_count = get_post_meta($post->ID, "column_counter", true);
$count = 0;
$i = 0;
do {
add_meta_box(
"column_meta_box_".$i,
"Kolumna ".++$i,
"build_column_meta_box",
"post",
"normal",
"default"
);
} while($i < $column_meta_box_count);
$count = 0;
}
function build_column_meta_box() {
global $post, $count;
wp_nonce_field(basename(__FILE__), "column_".$count."_fields");
?>
<h3>Opis Zdjęcia</h3>
<input type='text' name="column_<?php echo $count ?>_description" value='<?php echo get_post_meta($post->ID, "column_".$count."_description", true); ?>' style='width:100%' />
<h3>Kolor</h3>
<input type='text' name="column_<?php echo $count ?>_color" value='<?php echo get_post_meta($post->ID, "column_".$count."_color", true); ?>' style='width:10%' />
<h3>Zdjęcie</h3>
<input type='text' name="column_<?php echo $count ?>_image" class="meta-image" value='<?php echo get_post_meta($post->ID, "column_".$count."_image", true); ?>' style='width:100%' />
<input type="button" class="button image-upload-<?php echo $count ?>" value="Znajdź">
<div class="image-preview"><img src="<?php echo get_post_meta($post->ID, "column_".$count."_image", true); ?>" style="max-width: 250px;"></div>
<h3>Tekst</h3>
<input type='text' name="column_<?php echo $count ?>_text" value='<?php echo get_post_meta($post->ID, "column_".$count."_text", true); ?>' style='width:100%' />
<script>
jQuery(document).ready(function ($) {
var meta_image_frame;
$('.image-upload-<?php echo $count ?>').click(function (e) {
var meta_image_preview = $(this).parent().parent().children('.image-preview');
e.preventDefault();
var meta_image = $(this).parent().children('.meta-image');
if (meta_image_frame) {
meta_image_frame.open();
return;
}
meta_image_frame = wp.media.frames.meta_image_frame = wp.media({
title: meta_image.title,
button: {
text: meta_image.button
}
});
meta_image_frame.on('select', function () {
var media_attachment = meta_image_frame.state().get('selection').first().toJSON();
meta_image.val(media_attachment.url);
meta_image_preview.children('img').attr('src', media_attachment.url);
});
meta_image_frame.open();
});
});
</script>
<?php
$count++;
}
function save_column_meta() {
global $post, $count, $column_meta_box_count;
$column_meta_box_count = get_post_meta($post->ID, "column_counter", true);
$count = 0;
do {
if(!current_user_can("edit_post", $post->ID)) return $post->ID;
if(!isset($_POST["column_".$count."_description"]) || !isset($_POST["column_".$count."_img"]) || !isset($_POST["column_".$count."_text"]) || !wp_verify_nonce($_POST['column_'.$count.'fields'], basename(__FILE__))) return $post->ID;
$column_meta["column_".$count."_description"] = $_POST["column_".$count."_description"];
$column_meta["column_".$count."_img"] = $_POST["column_".$count."_img"];
$column_meta["column_".$count."_text"] = $_POST["column_".$count."_text"];
foreach( $column_meta as $key => $value ) {
if("revision" === $post->post_type) {
return;
}
if(get_post_meta($post->ID, $key, false) ) {
update_post_meta($post->ID, $key, $value);
} else {
add_post_meta($post->ID, $key, $value);
}
if(!$value ) {
delete_post_meta($post->ID, $key);
}
}
$count++;
} while($count <= $column_meta_box_count);
}
Проблема: ни одна из переменных не сохраняется в базе данных. Когда я создаю переменную, например, имя "column_0_description" показано правильно, поэтому я думаю, что проблема с сохранением. Прежде чем вы спросите, есть ловушка add_action ('save_post'). Во время отладки в Chrome Devtools я вижу, что метод post отправляет измененное значение переменной var. Он просто не сохраняется в базе данных.