0

I have a custom meta box with multiple text fields. I use this to call the information in the first box:

<?php the_post(); echo get_post_meta( get_the_ID(), 'dbt_text', true ); ?>

And this to call the second field:

<?php the_post(); echo get_post_meta( get_the_ID(), 'dbt_text1', true ); ?>

Here's the problem, when used individually they work perfectly. But if I have both on the same page, only one outputs. I need them to be separate but I need them both to produce their respective outputs from the meta box. I have tried to troubleshoot this and I just don't know enough about PHP and the WP core to figure this out on my own. Help is appreciated!

Here is the code for my custom meta boxes:

$prefix = 'dbt_';
$meta_box = array(
    'id' => 'my-meta-box',
    'title' => 'Titles',
    'page' => 'page',
    'context' => 'normal',
    'priority' => 'high',
    'fields' => array(
        array(
            'name' => 'Primary Title',
            'id' => $prefix . 'text',
            'type' => 'text'
            ),
        array(
            'name' => 'Secondary Title',
            'id' => $prefix . 'text1',
            'type' => 'text',   
        )
    )
);

add_action('admin_menu', 'mytheme_add_box');
// Add meta box
function mytheme_add_box() {
    global $meta_box;
    add_meta_box($meta_box['id'], $meta_box['title'], 'mytheme_show_box', $meta_box['page'], $meta_box['context'], $meta_box['priority']);
}

// Callback function to show fields in meta box
function mytheme_show_box() {
    global $meta_box, $post;
    // Use nonce for verification
    echo '<input type="hidden" name="mytheme_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />';
    echo '<table class="form-table">';
    foreach ($meta_box['fields'] as $field) {
        // get current post meta data
        $meta = get_post_meta($post->ID, $field['id'], true);
        echo '<tr>',
                '<th style="width:20%"><label for="', $field['id'], '">', $field['name'], '</label></th>',
                '<td>';
        switch ($field['type']) {
            case 'text':
                echo '<input type="text" name="', $field['id'], '" id="', $field['id'], '" value="', $meta ? $meta : $field['std'], '" size="30" style="width:97%" />',
                    '<br />', $field['desc'];
                break;          
        }
        echo    '<td>',
            '</tr>';
    }

    echo '</table>';
}

add_action('save_post', 'mytheme_save_data');

// Save data from meta box
function mytheme_save_data($post_id) {
    global $meta_box;

    // verify nonce
    if (!wp_verify_nonce($_POST['mytheme_meta_box_nonce'], basename(__FILE__))) {
        return $post_id;
    }

    // check autosave
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return $post_id;
    }

    // check permissions
    if ('page' == $_POST['post_type']) {
        if (!current_user_can('edit_page', $post_id)) {
            return $post_id;
        }
    } elseif (!current_user_can('edit_post', $post_id)) {
        return $post_id;
    }

    foreach ($meta_box['fields'] as $field) {
        $old = get_post_meta($post_id, $field['id'], true);
        $new = $_POST[$field['id']];

        if ($new && $new != $old) {
            update_post_meta($post_id, $field['id'], $new);
        } elseif ('' == $new && $old) {
            delete_post_meta($post_id, $field['id'], $old);
        }
    }
}
1

Your code will be like this

 if( have_posts() ):
  while( have_posts()): the_post();
    $txt_fld = get_post_meta( get_the_ID(), 'dbt_text', true );
    $txt_fld2 = get_post_meta( get_the_ID(), 'dbt_text', true );
  endwhile;
 endif;

echo $txt_fld; echo $txt_fld2

like this way.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.