从自定义元框调用数据

时间:2014-04-01 作者:AndrettiMilas

我创建了一个自定义元框,并将其粘贴到函数中。php(减去<?php 当然可以打电话)

我在这个元框中有两个字段,一个标记为“主要标题”,另一个标记为“次要标题”。

如何分别调用这些框中的数据,以便将它们插入到页面模板中?

<?php
$prefix = \'dbt_\';
$meta_box = array(
  \'id\' => \'my-meta-box\',
  \'title\' => \'Custom meta box\',
  \'page\' => \'post\',
  \'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="\';
  echo 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\'] . \'">\';
    echo $field[\'name\'];
    echo \'</label></th><td>\';
    switch ($field[\'type\']) {
      case \'text\':
        echo \'<input type="text" name="\' . $field[\'id\'] . \'"\';
        echo \' id="\' .$field[\'id\'] . \'"\';
        echo \' value="\' . ( $meta ? $meta : $field[\'std\'] ) . \'"\';
        echo \' size="30" style="width:97%" />\';
        echo \'<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);
      }
    }
}
?>

2 个回复
最合适的回答,由SO网友:Eduard Coumans 整理而成

元框在每个帖子上保存数据($post_id)

$value = get_post_meta($post_id, \'name\', true);
名称=\'dbt\\U text\'或\'dbt\\U text1\'

所以

$value = get_post_meta($post_id, \'dbt_text\', true);
$value1 = get_post_meta($post_id, \'dbt_text1\', true);
~more info on get_post_meta

SO网友:Aris Blevins

我刚刚在wp\\u debug打开的情况下运行了您的初始代码,似乎需要一些基本的内务管理来将数据实际保存到自定义字段中。我认为到目前为止,您的问题是没有保存任何数据,因此您无法读取任何内容。

在第55行和第57行,您试图打印阵列中不存在的部分,这会导致一些错误。

第55行:

echo \' value="\' . ( $meta ? $meta : $field[\'std\'] ) . \'"\';

$field[\'std\'] 不存在,只有$fieldname, idtype.

第57行:

echo \'<br />\' . $field[\'desc\'];

$field[\'desc\'] 也不存在。如果希望这些键存在于阵列中,请首先将它们添加到元盒阵列中。

我将第55行改为参考$field[\'id\'] 删除了第57行,效果很好。

然后,在模板文件中,如果调用:

$value = get_post_meta($post->ID, \'dbt_text\', true);

$value1 = get_post_meta($post->ID, \'dbt_text1\', true);

echo $value;

您将看到正确的数据。

结束

相关推荐

从Metabox调用WP图库上载器/选择器

单击帖子/页面上的添加媒体按钮时,我可以选择添加媒体。选择介质后,单击“插入到帖子中”,图像即被插入。但是,还有另一个选项,位于左侧边栏上。我可以单击“创建库”。图像选择过程是相同的,但当我单击“创建新库”时,它会转到一个新的框架,允许我编辑图像的顺序。这第二个窗口就是我想要的。我正在从metabox调用框架,我成功地获得了它,允许我抓取单个或多个图像,并将ID保存为字符串,以及将缩略图实时插入预览框。我找不到有关调用库框架的任何信息。我当前的代码如下:jQuery(\'#fg_select\').on(