我正在使用的插件与w3 total cache冲突。更具体地说,在我的代码中
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\' );
因为返回了不完整的对象(只有在使用w3 total缓存时才会发生这种情况,我声明了一个自动加载器,但在进行一些调试时,不完整的对象似乎存储在缓存中)
这是错误消息
Ai1ec\\U设置::get\\u instance():脚本试图执行方法或访问不完整对象的属性。请确保在调用unserialize()之前加载了要操作的对象的类定义“Ai1ec\\u Settings”,或提供一个\\uu autoload()函数来加载类定义
1) 有没有办法告诉w3 total cache不要缓存该选项
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();
}
}
}
最合适的回答,由SO网友:fischi 整理而成
好了,开始吧。试试这个:在你的函数中。php修改ai1ec\\U选项的行为:
$ai1ec_options = get_option(\'ai1ec_options\');
delete_option(\'ai1ec_options\');
add_option(\'ai1ec_options\', $ai1ec_options, \'\', \'no\'); // thanks for your suggestion :)
但是要小心,因为您可能会丢失设置的选项,所以一定要先从数据库中获取它们。或创建备份选项。然后,清除缓存并重试。