0

I have a plugin that writes metaboxes to certain pages. It writes the metaboxes fine and everything works as should...until I save. The save_post is not getting called, and I can't figure out why. Here is the code in my __Construct

class Plg_Admin_Meta {

public static function start() {
 return new self();
} 

public function __construct() {
  $this->plugin_url = WP_CONTENT_URL . '/plugins/' . basename(dirname(__FILE__));
  $this->plugin_dir = dirname(__FILE__);

  add_action('admin_init', array($this, '_admin_init'));  
  add_action('save_post', array($this, '_save_post'), 99);
}

The metaboxes are made from custom fields, and if I edit a custom field text area it saves fine, but I want it to save the data entered from the metabox instead. For whatever reason the save_post will not fire. I tried putting a die(var_dump($_POST)) at the start of my _save_post function and it isn't even firing.

Here is my _save_post function

public function _save_post($post_id) {
  //die(dump_var($_POST));
  update_post_meta($post_id, 'content__service_overviews', "test2");
  // Post meta isn't sent for autosaves
  if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
    return;
  }
}

Plg_Admin_Meta::start();

As you can see I am just manually trying to update a field right now, but the function isn't even getting called.

EDIT: Requested entire class:

  class Plg_Admin_Meta {

    public static function start() {
     return new self();
    } 

    public function __construct() {
      $this->plugin_url = WP_CONTENT_URL . '/plugins/' . basename(dirname(__FILE__));
      $this->plugin_dir = dirname(__FILE__);
      $this->prefix = 'content__';
      $this->page_fields = array(
        'site' => array(
          'textarea:slideshow',
          'text:address',
          'text:phone',
          'text:fax',
          'text:twitter_link',
          'text:weather_link',
          'text:meta_description',
          'text:meta_keywords',
          'text:google_analytics_account_number',
          'text:google_site_verification_code'
        ),
        'home' => array(
          'textarea:about_enernex',
          'textarea:introducing_utility_stats',
          'textarea:recent_content',
          'textarea:workshop_button'
        ),
        'about' => array(
          'textarea:what_we_do_photo',
          'textarea:what_we_do',
          'textarea:our_mission_photo',
          'textarea:our_mission',
          'textarea:get_to_know_us_photo',
          'textarea:get_to_know_us_principals',
          'textarea:get_to_know_us_staff'
        ),
        'careers' => array(
          'textarea:why_enernex_photo',
          'textarea:why_enernex',
          'textarea:support_our_mission_photo',
          'textarea:support_our_mission',
          'textarea:the_innovation_valley_photo',
          'textarea:the_innovation_valley_our_location'
        ),
        'contact' => array(
          'textarea:photo',
          'textarea:contact_information',
          'textarea:map_image',
          'textarea:directions'
        ),
        'employees' => array(
          'text:title',
          'textarea:text',
          'textarea:photo'
        ),
        'support' => array(
          'textarea:announcing_utility_stats',
          'textarea:faq',
          'textarea:utility_ownership_key',
          'textarea:support'
        ),
        'newsroom' => array(
          'textarea:service_overviews',
          'textarea:media_contacts',
          'textarea:industry_resources_and_related_links'
        ),
        'services' => array(
          'textarea:main_text',
          'textarea:power_systems_consulting_photo',
          'textarea:smart_grid_engineering_photo',
          'textarea:smart_grid_labs_photo',
          'textarea:workshops_photo'
        ),
        'iec-workshop' => array(
          'textarea:first_photo',
          'textarea:course_overview',
          'textarea:topics_covered',
          'textarea:our_instructors',
          'textarea:workshop_dates',
          'textarea:who_should_attend',
          'textarea:key_benefits',
          'textarea:schedule_location_and_cost',
          'textarea:second_photo',
          'textarea:location'
        ),
        'cyber-security' => array(
          'textarea:meet_the_team',
          'text:media_kit_download_link'
        )
      );

      $this->post_fields = array(
        'news' => array(
          'textarea:overview',
          'textarea:story'
        ),
        'press' => array(
          'textarea:overview',
          'textarea:story'
        ),
        'whitepapers' => array(
          'textarea:overview',
          'textarea:uploads'
        ),
        'areas' => array(
          'textarea:overview',
          'textarea:uploads',
          'textarea:projects'
        ),
        'links' => array(
          'text:URL'
        ),
        'jobs' => array(
          'textarea:basic_function',
          'textarea:education_and_experience',
          'textarea:skills',
          'textarea:duties_and_responsibilities',
          'textarea:contact_information',
          'textarea:notes'
        ),
        'employees' => array(
          'text:position',
          'text:department',
          'text:year_joined',
          'text:power_industry_years',
          'text:education',
          'text:expertise',
          'text:phone',
          'text:email_address',
          'textarea:biography',
          'textarea:headshot'
        ),
        'blog' => array(
          'textarea:author',
          'textarea:content'
        ),
        'announcements' => array(
          'text:link_to_announcement',
          'textarea:content'
        )
      );



      add_action('admin_init', array($this, '_admin_init'));  
      add_action('save_post', array($this, '_save_post'), 99, 2);   



    }


    public function _admin_init() {

      $post_id = isset($_REQUEST['post']) ? $_REQUEST['post'] : false;
      if ($post_id) {

        $content = get_post($post_id);
        $slug = $content->post_name;
        $post_type = $content->post_type;

        if (isset($post_type)) {

          switch($post_type) {

            case 'page':
              $this->_create_metaboxes('page', $this->page_fields[$slug]);
            break;

            case 'post':
              $category = get_the_category($post_id);
              $slug = $category[0]->slug;
              $this->_create_metaboxes('post', $this->post_fields[$slug]);
            break;

          }

        }

      }

    }

    public function _create_metabox_content($post, $metabox) {

      $post_id = $post->ID;   
      $meta_key = $metabox['args']['meta_key'];
      $meta_value = get_post_meta($post_id, $meta_key, true);

      switch ($metabox['args']['type']) {

        case 'text':

          ?>

          <input type="text" name="<?php echo $meta_key; ?>" value="<?php echo $meta_value; ?>" style="font-family:'Georgia', 'Times New Roman', 'Bistream Charter', 'Times', 'serif';font-size: 13px; line-height: 19px; color: #333; width: 100%;" />

          <?php

        break;

        case 'textarea':

          wp_editor( 
            $meta_value,
            $meta_key,
            array(
              'textarea_name' => $meta_key,
              'textarea_rows' => 4,
              'tinymce' => array(
                'content_css' => $this->plugin_url . '/tinymce.css'
              )
            )        
          );     

        break;

      }

    }

    public function _create_metaboxes($post_type, $fields_array) {

      if (!empty($fields_array)) {

          wp_enqueue_style('admin', $this->plugin_url . '/admin.css');

            foreach ($fields_array as $field) {

              $tokens = explode(':', $field);
              $type = $tokens[0];
              $meta_key = $this->prefix . $tokens[1];
              $id = 'metabox_' . $tokens[1];
              $title = ucwords(preg_replace('/\_/', ' ', $tokens[1]));            

              add_meta_box(
                $id,
                $title,
                array($this, '_create_metabox_content'),
                $post_type,
                'normal',
                'high',
                array(
                  'meta_key' => $meta_key,
                  'type' => $type
                )                  
              );

            }

      }

    }  

    public function _save_post($post_id) {

    //die(var_dump($_POST));
    // Post meta isn't sent for autosaves
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
      return;
    }

    update_post_meta($post_id, 'content__service_overviews', "test2");


      if (isset($_REQUEST['post_ID'])) {


          foreach ($_REQUEST as $meta_key => $meta_value) {
            if (strstr($meta_key, $this->prefix)) {

            //update_post_meta(intval($_REQUEST['post_ID']), meta_key, meta_value);

            }

          }


      }

    }


  }


  Plg_Admin_Meta::start();
2
  • 1
    can you post the entire class? Your static function seems a little odd/redundant
    – Tom J Nowell
    Commented Jul 23, 2014 at 23:48
  • @TomJNowell I posted the entire class, thanks for taking the time to look. Commented Jul 24, 2014 at 13:35

1 Answer 1

0

So I found out the problem was in the database. If I deleted the page, then re-created it then it functioned as it should. I couldn't narrow down what exactly was wrong with the data, but something was.

That page did have a lot of revisions, not that it should matter?

1
  • I came across this same issue on a project three months ago, I had to put it down and just came back to it. Thankfully I found this post. After deleting the page and recreating it, I was able to save to it again. Makes no sense. Commented Feb 11, 2015 at 5:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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