/** * 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; }