it-swarm.com.de

Anzeigen des benutzerdefinierten Beitragstyps aus dem dynamischen benutzerdefinierten Feld

Ich versuche, ein benutzerdefiniertes Meta-Feld zu erstellen, mit dem Sie Zeilen dynamisch hinzufügen können. Der folgende Codeausschnitt funktioniert einwandfrei und speichert Daten in meinem Bearbeitungsseitenabschnitt. Es ist jedoch nicht möglich, die Daten auf der aktuellen Seite anzuzeigen:

    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 arry
$songs = get_post_meta($post->ID,'songs',true);

$c = 0;
if ( count( $songs ) > 0 ) {
    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);
    }

Wie Sie sehen, bezieht sich "Seite" auf die Seite, auf der ich posten möchte. Wenn ich nun die Ergebnisse auf der Seitenvorlage durchschleife, wird nichts angezeigt.

     <?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 ); ?>                  
    <?php echo $meta['title']; ?><?php echo $meta['track']; ?>
         <?php endwhile; 
             endif;
                wp_reset_postdata(); 
            ?>

Ich erhalte Ergebnisse, wenn ich 'var_dump ($ posts);' verwende. Ich kann es einfach nicht auf der Seite anzeigen lassen.

1
user3645783

Ändern Sie $meta['title'] in $meta['title'][0] und das Gleiche für $meta['track']. ändere es in $meta['track'][0]

UPDATE:

Ich habe mir den Code genauer angesehen, und Sie benötigen im Grunde genommen eine foreach-Schleife. Hier sollte der endgültige Code so aussehen:

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

<?php
foreach ($meta as $key => $value) {
    echo $value['title']; ?><?php echo $value['track'];
}
?>
<?php endwhile; 
    endif;
    wp_reset_postdata(); 
?>

Vielen Dank

1
Abdul Awal

Ok, ich habe es dank des Hinweises von Abdul gelöst! Ich muss mein Array durchlaufen, damit ich eine einfache for-Schleife implementiere:

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

Vielen Dank für die Hilfe!

0
user3645783