/** * @param string $meta_type * @param int $object_id * @param string $multi_key 'abc' or 'ab/c/def' * @param array|string|int|bool $set_value */ public static function set($meta_type, $object_id, $multi_key, $set_value) { if (empty($multi_key)) { trigger_error('Key not specified', E_USER_WARNING); return; } $multi_key = explode('/', $multi_key); $key = array_shift($multi_key); $multi_key = implode('/', $multi_key); // Make sure meta is added to the post, not a revision. if ($meta_type === 'post' && ($the_post = wp_is_post_revision($object_id))) { $object_id = $the_post; } $cache_key = self::$cache_key . '/' . $meta_type . '/' . $object_id . '/' . $key; if (empty($multi_key) && $multi_key !== '0') { /** Replace entire meta */ fw_update_metadata($meta_type, $object_id, $key, $set_value); FW_Cache::del($cache_key); } else { /** Change only specified key */ $values = array(); $values['original'] = self::get($meta_type, $object_id, $key, true); $values['prepared'] = self::get($meta_type, $object_id, $key, false); fw_aks($multi_key, $set_value, $values['original']); fw_aks($multi_key, fw_prepare_option_value($set_value), $values['prepared']); FW_Cache::set($cache_key, $values); fw_update_metadata($meta_type, $object_id, $key, $values['original']); } }
/** * @param int $post_id * @param string $multi_key 'abc' or 'ab/c/def' * @param array|string|int|bool $set_value */ public static function set($post_id, $multi_key, $set_value) { if (empty($multi_key)) { trigger_error('Key not specified', E_USER_WARNING); return; } $multi_key = explode('/', $multi_key); $key = array_shift($multi_key); $multi_key = implode('/', $multi_key); $cache_key = self::$cache_key . '/' . $post_id . '/' . $key; if (empty($multi_key) && $multi_key !== '0') { /** Replace entire meta */ fw_update_post_meta($post_id, $key, $set_value); FW_Cache::del($cache_key); } else { /** Change only specified key */ $values = array(); $values['original'] = self::get($post_id, $key, true); $values['prepared'] = self::get($post_id, $key, false); fw_aks($multi_key, $set_value, $values['original']); fw_aks($multi_key, fw_prepare_option_value($set_value), $values['prepared']); FW_Cache::set($cache_key, $values); fw_update_post_meta($post_id, $key, $values['original']); } }
/** * Alternative for update_option() * @param string $option_name * @param string|null $specific_multi_key * @param array|string|int|bool $set_value */ public static function set($option_name, $specific_multi_key = null, $set_value) { $cache_key = self::$cache_key . '/' . $option_name; if ($specific_multi_key === null) { /** Replace entire option */ update_option($option_name, $set_value, false); FW_Cache::del($cache_key); } else { /** Change only specified key */ $values = array(); $values['original'] = self::get($option_name, null, true); $values['prepared'] = self::get($option_name, null, false); fw_aks($specific_multi_key, $set_value, $values['original']); fw_aks($specific_multi_key, fw_prepare_option_value($set_value), $values['prepared']); FW_Cache::set($cache_key, $values); update_option($option_name, $values['original'], false); } }
/** * Scan all directories for extensions * * @param bool $reset_cache * @return array */ private function get_installed_extensions($reset_cache = false) { $cache_key = $this->get_cache_key('installed_extensions'); if ($reset_cache) { FW_Cache::del($cache_key); } try { return FW_Cache::get($cache_key); } catch (FW_Cache_Not_Found_Exception $e) { $extensions = array(); foreach (fw()->extensions->get_locations() as $location) { // leave only used keys $location = array('path' => $location['path'], 'is' => $location['is']); $this->read_extensions($location, $extensions); } FW_Cache::set($cache_key, $extensions); return $extensions; } }
/** * Set post option value in database * * @param null|int $post_id * @param string|null $option_id Specific option id (accepts multikey). null - all options * @param $value */ function fw_set_db_post_option($post_id = null, $option_id = null, $value) { FW_Cache::del('fw_post_options/values'); $meta_key = 'fw_options'; $post_id = intval($post_id); if (!$post_id) { /** @var WP_Post $post */ global $post; if (!$post) { return; } else { $post_id = $post->ID; } } $post_type = get_post_type(($post_revision_id = wp_is_post_revision($post_id)) ? $post_revision_id : $post_id); try { $options = FW_Cache::get($cache_key = 'fw_post_options/only/' . $post_type); } catch (FW_Cache_Not_Found_Exception $e) { FW_Cache::set($cache_key, $options = array()); // prevent recursion if (apply_filters('fw_get_db_post_option:fw-storage-enabled', $post_type !== 'fw-slider', $post_type)) { FW_Cache::set($cache_key, $options = fw_extract_only_options(fw()->theme->get_post_options($post_type))); } } $sub_keys = null; if ($option_id) { $option_id = explode('/', $option_id); // 'option_id/sub/keys' $_option_id = array_shift($option_id); // 'option_id' $sub_keys = empty($option_id) ? null : implode('/', $option_id); // 'sub/keys' $option_id = $_option_id; unset($_option_id); $old_value = fw_get_db_post_option($post_id, $option_id); if ($sub_keys) { // update sub_key in old_value and use the entire value $new_value = $old_value; fw_aks($sub_keys, $value, $new_value); $value = $new_value; unset($new_value); $old_value = fw_akg($sub_keys, $old_value); } if (isset($options[$option_id])) { $value = fw()->backend->option_type($options[$option_id]['type'])->storage_save($option_id, $options[$option_id], $value, array('post-id' => $post_id)); } FW_WP_Meta::set('post', $post_id, $meta_key . '/' . $option_id, $value); } else { $old_value = fw_get_db_post_option($post_id); if (!is_array($value)) { $value = array(); } foreach ($value as $_option_id => $_option_value) { if (isset($options[$_option_id])) { $value[$_option_id] = fw()->backend->option_type($options[$_option_id]['type'])->storage_save($_option_id, $options[$_option_id], $_option_value, array('post-id' => $post_id)); } } FW_WP_Meta::set('post', $post_id, $meta_key, $value); } FW_Cache::del('fw_post_options/values'); // fixes https://github.com/ThemeFuse/Unyson/issues/1538 /** * @deprecated */ fw()->backend->_sync_post_separate_meta($post_id); /** * @since 2.2.8 */ do_action('fw_post_options_update', $post_id, $option_id, explode('/', $sub_keys), $old_value); }
public final function set($item_id = null, $option_id = null, $value, array $extra_data = array()) { FW_Cache::del($cache_key_values = $this->get_cache_key('values', $item_id, $extra_data)); FW_Cache::del($cache_key_values_processed = $this->get_cache_key('values:processed', $item_id, $extra_data)); try { $options = FW_Cache::get($cache_key = $this->get_cache_key('options', $item_id, $extra_data)); } catch (FW_Cache_Not_Found_Exception $e) { FW_Cache::set($cache_key, array()); // prevent recursion FW_Cache::set($cache_key, $options = fw_extract_only_options($this->get_options($item_id, $extra_data))); } $sub_keys = null; if ($option_id) { $option_id = explode('/', $option_id); // 'option_id/sub/keys' $_option_id = array_shift($option_id); // 'option_id' $sub_keys = empty($option_id) ? null : implode('/', $option_id); // 'sub/keys' $option_id = $_option_id; unset($_option_id); $old_values = is_array($old_values = $this->get_values($item_id, $extra_data)) ? $old_values : array(); $old_value = isset($old_values[$option_id]) ? $old_values[$option_id] : null; if ($sub_keys) { // update sub_key in old_value and use the entire value $new_value = $old_value; fw_aks($sub_keys, $value, $new_value); $value = $new_value; unset($new_value); $old_value = fw_akg($sub_keys, $old_value); } if (isset($options[$option_id])) { $value = fw()->backend->option_type($options[$option_id]['type'])->storage_save($option_id, $options[$option_id], $value, $this->get_fw_storage_params($item_id, $extra_data)); } $old_values[$option_id] = $value; $this->set_values($item_id, $old_values, $extra_data); unset($old_values); } else { $old_value = is_array($old_values = $this->get_values($item_id, $extra_data)) ? $old_values : array(); if (!is_array($value)) { $value = array(); } foreach ($value as $_option_id => $_option_value) { if (isset($options[$_option_id])) { $value[$_option_id] = fw()->backend->option_type($options[$_option_id]['type'])->storage_save($_option_id, $options[$_option_id], $_option_value, $this->get_fw_storage_params($item_id, $extra_data)); } } $this->set_values($item_id, $value, $extra_data); } FW_Cache::del($cache_key_values); // fixes https://github.com/ThemeFuse/Unyson/issues/1538 FW_Cache::del($cache_key_values_processed); $this->_after_set($item_id, $option_id, $sub_keys, $old_value, $extra_data); }
/** * Scan all directories for extensions * * @param bool $reset_cache * * @return array */ private function get_installed_extensions($reset_cache = false) { $cache_key = $this->get_cache_key('installed_extensions'); if ($reset_cache) { FW_Cache::del($cache_key); } try { return FW_Cache::get($cache_key); } catch (FW_Cache_Not_Found_Exception $e) { $search_paths = array('framework' => fw_get_framework_directory('/extensions'), 'parent' => fw_get_template_customizations_directory('/extensions')); if (is_child_theme()) { $search_paths['child'] = fw_get_stylesheet_customizations_directory('/extensions'); } $extensions = array(); foreach ($search_paths as $source => $path) { $this->read_extensions($source, $path, $extensions); } FW_Cache::set($cache_key, $extensions); return $extensions; } }
/** * @internal */ public function _reset_cache() { FW_Cache::del($this->get_main_cache_key()); }