David G2
David G2

Reputation: 23

WordPress Meta Box data not being saved, dissapears

I've added some WordPress Metadata code to the functions.php of my wordpress theme, and I'm facing the issue of my metabox data not being saved at all, it just disappears on save draft or publish. I had an earlier version of the code working perfectly fine a month ago, but due to some errors I don't have it anymore, and I can't remember how I got the code working from this draft.

I've stared at this code for 4 hours today, and I know the answer should be simple, but it'd driving me mad:

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);
        }
    }
}

Help, please?

Upvotes: 1

Views: 755

Answers (1)

James Pellerano
James Pellerano

Reputation: 31

function save_portfolio_meta($post_id, $post)
{
   if (!wp_verify_nonce($_POST['portfoliometa_noncename'], plugin_basename(__FILE__))) return $post->ID;

   if (!current_user_can('edit_post', $post_id))
      return $post_id;

   $portfolio_meta['_link'] = $_POST['_link'];
   $portfolio_meta['_class'] = $_POST['_class'];

   foreach($portfolio_meta as $key => $value)
   {    
      $value = implode(',', (array)$value);

      if (get_post_meta($post->ID, $key, FALSE))
      {
         update_post_meta($post->ID, $key, $value);
      }
      else
      {
         add_post_meta($post->ID, $key, $value);
      }

      if (!$value)
         delete_post_meta($post->ID, $key);
   }
}

add_action('save_post', 'save_portfolio_meta', 1, 2);

Upvotes: 2

Related Questions