无法调用多个Meta Box输出

时间:2014-07-31 作者:AndrettiMilas

我有一个带有多个文本字段的自定义元框。我用它来调用第一个框中的信息:

<?php the_post(); echo get_post_meta( get_the_ID(), \'dbt_text\', true ); ?>
这将调用第二个字段:

<?php the_post(); echo get_post_meta( get_the_ID(), \'dbt_text1\', true ); ?>
Here\'s the problem, 单独使用时,它们工作得很好。但如果两者都在同一页上,则只有一个输出。我需要它们分开,但我需要它们都从元框中生成各自的输出。我已经尝试过解决这个问题,但我对PHP和WP核心的了解还不够,无法自己解决这个问题。感谢您的帮助!

以下是我的自定义元框的代码:

$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 个回复
最合适的回答,由SO网友:Chinmoy Kumar Paul 整理而成

您的代码如下

 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\\U fld;echo$txt\\U fld2

就像这样。

结束