2017-03-08 15 views
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> 

답변

0

직접 답변을 찾았습니다. 내 출력이 배열이기 때문에 다음과 같이 반복해야합니다.

<?php for($i= 0 ; $i <= 10 ; $i++) echo '<p>' .$meta[$i]['title']. '</p>';?>