Можно ли отключить кеширование опции при использовании общего кэша w3?

плагин, над которым я работаю, конфликтует с общим кэшем w3. Чтобы быть более конкретным, в моем коде у меня есть

static function get_instance() { if( self::$_instance === NULL ) { // get the settings from the database self::$_instance = get_option( 'ai1ec_settings' ); // if there are no settings in the database // save default values for the settings if( ! self::$_instance ) { self::$_instance = new self(); delete_option( 'ai1ec_settings' ); add_option( 'ai1ec_settings', self::$_instance ); } else { self::$_instance->set_defaults(); // set default settings } } return self::$_instance; } 

Проблема заключается в self::$_instance = get_option( 'ai1ec_settings' ); потому что возвращается un неполный объект (это происходит только при использовании общего кэша w3, я объявил автозагрузчик, но, выполняя некоторую отладку, кажется, что неполный объект хранится в кеше)

Это сообщение об ошибке

Ai1ec_Settings :: get_instance (): скрипт попытался выполнить метод или получить доступ к объекту неполного объекта. Убедитесь, что определение класса «Ai1ec_Settings» объекта, с которым вы пытаетесь работать, было загружено до вызова unserialize () или предоставления функции __autoload () для загрузки определения класса

1) Есть ли способ сообщить, что общий кеш w3 не кэширует эту опцию?
2) Если нет, было бы правильно обращаться с такими вещами?

 try { self::$_instance = self::getOptionsFromDb(); } catch (Exception $e) { //Show a friendly error page } private static function getOptionsFromDb(){ $ai1ec_settings = get_option( 'ai1ec_settings' ); if ( ! $ai1ec_settings instanceof self ) { if (false === $ai1ec_settings) { return false; //option was not set in the db } elseif( class_exists('W3_Plugin_TotalCacheAdmin') ){ //let's clear thew cache and try again $plugin_totalcacheadmin = & w3_instance('W3_Plugin_TotalCacheAdmin'); $plugin_totalcacheadmin->flush_all(); $ai1ec_settings = get_option( 'ai1ec_settings' ); if ( $ai1ec_settings instanceof self ) { return $ai1ec_settings; } else { throw new Exception(); } } else { throw new Exception(); } } } 

Solutions Collecting From Web of "Можно ли отключить кеширование опции при использовании общего кэша w3?"

хорошо, здесь мы идем. попробуйте это: в your functions.php измените поведение ai1ec_options:

 $ai1ec_options = get_option('ai1ec_options'); delete_option('ai1ec_options'); add_option('ai1ec_options', $ai1ec_options, '', 'no'); // thanks for your suggestion :) 

будьте осторожны, так как вы можете потерять свои настройки, поэтому обязательно сначала получите их из базы данных. или создать резервную копию. затем очистите кеши и повторите попытку.

Я просто сражался с этим на странице. Кто использует W3TC, а затем Memcached для своего кеша объектов.

Глядя на то, как ai1ec решил это решение, похоже, выглядит так:

 wp_cache_delete( 'alloptions', 'options' ); 

Это было подтверждено page.ly, найденным в билете поддержки, о котором я обсуждал этот вопрос.