get_post_meta doesn't work

时间:2014-02-21 作者:dborghez

我在页面内创建了一个自定义元框,但我无法显示内容
我在循环中,这里是我的函数代码。php:

$meta_box[\'portfolio\'] = array(
    \'id\' => \'descportfolio\',
    \'title\' => \'Description\',
    \'context\' => \'normal\',
    \'priority\' => \'high\',
    \'fields\' => array(
        array(
            \'name\' => \'Short Description\',
            \'desc\' => \'This short desc will appear under the thumbnail with hover effect\',
            \'id\' => \'portfolio_description\',
            \'type\' => \'descport\',
            \'default\' => \'\'
        )
   )
);  
add_action(\'admin_menu\', \'descportfolio_add_box\'); 
//Add meta boxes to post types
function descportfolio_add_box() {
    global $meta_box;

    foreach($meta_box as $post_type => $value) {
        add_meta_box($value[\'id\'], $value[\'title\'], \'descportfolio_format_box\', $post_type, $value[\'context\'], $value[\'priority\']);
    }
}
//Format meta boxes
function descportfolio_format_box() {
  global $meta_box, $post;

  // Use nonce for verification
  echo \'<input type="hidden" name="descportfolio_meta_box_nonce" value="\', wp_create_nonce(basename(__FILE__)), \'" />\';

  echo \'<table class="form-table">\';

  foreach ($meta_box[$post->post_type][\'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[\'default\']) . \'" size="30" style="width:97%" />\'. \'<br />\'. $field[\'desc\'];
              break;
          case \'descport\':
              echo \'<input type="textarea" name="\'. $field[\'id\']. \'" id="\'. $field[\'id\'] .\'" value="\'. ($meta ? $meta : $field[\'default\']) . \'" size="30" maxlength="5" style="width:97%" />\'. \'<br />\'. $field[\'desc\'];
              break;
          case \'textarea\':
              echo \'<textarea name="\'. $field[\'id\']. \'" id="\'. $field[\'id\']. \'" cols="60" rows="4" style="width:97%">\'. ($meta ? $meta : $field[\'default\']) . \'</textarea>\'. \'<br />\'. $field[\'desc\'];
              break;
          case \'select\':
              echo \'<select name="\'. $field[\'id\'] . \'" id="\'. $field[\'id\'] . \'">\';
              foreach ($field[\'options\'] as $option) {
                  echo \'<option \'. ( $meta == $option ? \' selected="selected"\' : \'\' ) . \'>\'. $option . \'</option>\';
              }
              echo \'</select>\';
              break;
          case \'radio\':
              foreach ($field[\'options\'] as $option) {
                  echo \'<input type="radio" name="\' . $field[\'id\'] . \'" value="\' . $option[\'value\'] . \'"\' . ( $meta == $option[\'value\'] ? \' checked="checked"\' : \'\' ) . \' />\' . $option[\'name\'];
              }
              break;
          case \'checkbox\':
              echo \'<input type="checkbox" name="\' . $field[\'id\'] . \'" id="\' . $field[\'id\'] . \'"\' . ( $meta ? \' checked="checked"\' : \'\' ) . \' />\';
              break;
      }
      echo     \'<td>\'.\'</tr>\';
  }

  echo \'</table>\';

}
// Save data from meta box
function descportfolio_save_data($post_id) {
    global $meta_box,  $post;

    //Verify nonce
    if (!wp_verify_nonce($_POST[\'descportfolio_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[$post->post_type][\'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);
        }
    }
}

add_action(\'save_post\', \'descportfolio_save_data\');
这里是我的代码

<?php echo get_post_meta($post->ID, "descportfolio", true); ?>
我尝试使用get\\u post\\u ID而不是$post->ID,但没有改变<有人能看到任何错误吗

1 个回复
最合适的回答,由SO网友:fischi 整理而成

你搞错了id 为您的get_post_meta(). 当您通过metabox中字段的id定义输入名称时,它必须是portfolio_description.

<?php echo get_post_meta($post->ID, "portfolio_description", true); ?>
应该做到这一点。

如果您不确定post_meta 您需要打电话,尝试检查input 字段,并检查input.

inspect metabox field

结束