/**
  * Allow previewing and updating of a standalone collection
  */
 public function action_customize_save_collection()
 {
     // current_filter() is for backwards compat even though these are actions
     if (0 === strpos(current_filter(), 'customize_update_')) {
         $action = 'update';
         $collection_name = str_replace('customize_update_collection_setting_', '', current_filter());
     } else {
         if (0 === strpos(current_filter(), 'customize_preview_')) {
             $action = 'preview';
             $collection_name = str_replace('customize_preview_collection_setting_', '', current_filter());
         } else {
             return;
         }
     }
     $collection = Post_Collection::get_by_name($collection_name);
     if (!$collection) {
         $collection = Post_Collection::create($collection_name);
     }
     $posted_items = json_decode(wp_unslash($_POST['customized']), true);
     $key = 'collection_setting_' . $collection_name;
     $values = !empty($posted_items[$key]) ? array_map('intval', $posted_items[$key]) : array();
     if ('update' == $action) {
         $collection->set_customizer_item_ids($values);
         $collection->set_published_item_ids($values);
     } else {
         if ('preview' == $action) {
             $collection->set_customizer_item_ids($values);
         }
     }
 }
 /**
  * Update the posts associated with widget
  *
  * @param array $new_instance
  * @param array $old_instance
  * @return array $instance
  */
 public function update($new_instance, $old_instance)
 {
     $collection = Post_Collection::get_by_name($this->get_collection_name());
     if (!$collection) {
         $collection = Post_Collection::create($this->get_collection_name());
         if (is_wp_error($collection)) {
             return $old_instance;
         }
     }
     $instance = array();
     $instance['title'] = !empty($new_instance['title']) ? sanitize_text_field($new_instance['title']) : '';
     if (!empty($new_instance['collection_items'])) {
         $instance_items = array_map('absint', explode(',', $new_instance['collection_items']));
     } else {
         $instance_items = array();
     }
     // Triggers cache bust in Customizer and also used for save
     $instance['collection_items_stash'] = $instance_items;
     // Doing a customizer preview should only modify Customizer collection items.
     if ($this->is_customizer_widget_update()) {
         $collection->set_customizer_item_ids($instance_items);
     } else {
         $collection->set_published_item_ids($instance_items);
     }
     return $instance;
 }