Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I created a custom meta box inside a page but I can't display the content!
I'm inside the loop and here there is the code of my functions.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');

And here my code inside the page

<?php echo get_post_meta($post->ID, "descportfolio", true); ?>

I've tried with get_post_ID instead of $post->ID, but nothing changed.
Can anyone see any error?

share|improve this question
    
Do you see the values in your database correctly? –  fischi Feb 21 at 9:34
    
I went in wp_postmeta and I didn't find anything but in the post panel I can see the value of the meta_box so it's saved somewhere –  dborghez Feb 21 at 9:40

1 Answer 1

up vote 0 down vote accepted

You got the wrong id for your get_post_meta(). As you define the input-name by the id of the field in your metabox, it has to be portfolio_description.

<?php echo get_post_meta($post->ID, "portfolio_description", true); ?>

Should do the trick.

If you are not sure which name of the post_meta you need to call, try inspecting the input field in your developer tools in your browser, and check the name of the input.

inspect metabox field

share|improve this answer
    
Thanks a ton @fischi, it works. You made my day :) –  dborghez Feb 21 at 10:19
    
glad to hear @dborghez, take care! –  fischi Feb 21 at 10:20

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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