0
동적으로 행을 추가 할 수있는 사용자 지정 메타 상자를 만들려고합니다. 다음 코드 스 니펫은 잘 작동하고 편집 페이지 섹션에 데이터를 저장합니다. 그러나 실제 페이지에 데이터를 표시 할 수는 없습니다.자료 Wordpress 동적 메타 상자
// –––Dynamic Custom Box
add_action('add_meta_boxes', 'dynamic_add_custom_box');
/* Do something with the data entered */
add_action('save_post', 'dynamic_save_postdata');
/* Adds a box to the main column on the Post and Page edit screens */
function dynamic_add_custom_box() {
add_meta_box(
'dynamic_sectionid',
__('My Tracks', 'myplugin_textdomain'),
'dynamic_inner_custom_box',
'page');
}
/* Prints the box content */
function dynamic_inner_custom_box() {
global $post;
// Use nonce for verification
wp_nonce_field(plugin_basename(__FILE__), 'dynamicMeta_noncename');
?>
<div id="meta_inner">
<?php
//get the saved meta as an array
$songs = get_post_meta($post->ID,'songs',true);
$c = 0;
if(is_array($songs)){
foreach($songs as $track) {
if (isset($track['title']) || isset($track['track'])) {
printf('<p>Song Title <input type="text" name="songs[%1$s][title]" value="%2$s" /> -- Track number : <input type="text" name="songs[%1$s][track]" value="%3$s" /><span class="remove">%4$s</span></p>', $c, $track['title'], $track['track'], __('Remove Track'));
$c = $c +1;
}
}
}
?>
<span id="here"></span>
<span class="add"><?php _e('Add Tracks'); ?></span>
<script>
var $ =jQuery.noConflict();
$(document).ready(function() {
var count = <?php echo $c; ?>;
$(".add").click(function() {
count = count + 1;
$('#here').append('<p> Song Title <input type="text" name="songs['+count+'][title]" value="" /> -- Track number : <input type="text" name="songs['+count+'][track]" value="" /><span class="remove">Remove Track</span></p>');
return false;
});
$(".remove").live('click', function() {
$(this).parent().remove();
});
});
</script>
</div><?php
}
/* When the post is saved, saves our custom data */
function dynamic_save_postdata($post_id) {
// verify if this is an auto save routine.
// If it is our form has not been submitted, so we dont want to do anything
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return;
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if (!isset($_POST['dynamicMeta_noncename']))
return;
if (!wp_verify_nonce($_POST['dynamicMeta_noncename'], plugin_basename(__FILE__)))
return;
// OK, we're authenticated: we need to find and save the data
$songs = $_POST['songs'];
update_post_meta($post_id,'songs',$songs);
}
add_action('save_post', 'save_songs_meta');
'페이지'는 내가 게시하고 싶은 페이지를 나타냅니다. 이제는 페이지 템플릿에서 결과에 대해 루프 할 때 아무 것도 나타나지 않습니다.
<?php
$args = array(
'post_type' => 'page',
);
$repeat_loop = new WP_Query($args); if ($repeat_loop->have_posts()) :while ($repeat_loop->have_posts()) : $repeat_loop->the_post();
$meta = get_post_meta($post->ID, 'songs', true); ?>
<p style="color: #111111 !important;"><?php echo $meta['title']; ?><? php echo $meta['track']; ?>
<?php endwhile; endif; wp_reset_postdata(); ?></p>