使用w3总缓存时,是否可以禁用选项的缓存?

时间:2012-04-24 作者:Nicola Peluchetti

我正在使用的插件与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();
        }
    }   
}

2 个回复
最合适的回答,由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 :)
但是要小心,因为您可能会丢失设置的选项,所以一定要先从数据库中获取它们。或创建备份选项。然后,清除缓存并重试。

SO网友:lkraav

我只是在页面上与之斗争。ly使用W3TC,然后使用Memcached作为对象缓存。

正在查找at how ai1ec has solved it 解决方案似乎是:

wp_cache_delete( \'alloptions\', \'options\' );
page证实了这一点。ly在我讨论这个问题的支持票中找到。

结束

相关推荐

在创建术语的同一插件中调用CLEAN_TERM_CACHE()失败,单独调用时成功吗?

我的插件代码如下。在myPlugin\\u cleanup()函数中,我创建了一些类别,并将术语id 1指定为父级。由于known bug with creating categories via script (无法创建category\\u children数组,并且在访问包含类别列表的页面时会导致致命错误),我将clean\\u term\\u cache()调用直接放置在创建类别的函数下方。然而,它不起作用。未创建category\\u children选项。有趣的是,如果我创建一个插件,其唯一功

使用w3总缓存时,是否可以禁用选项的缓存? - 小码农CODE - 行之有效找到问题解决它

使用w3总缓存时,是否可以禁用选项的缓存?

时间:2012-04-24 作者:Nicola Peluchetti

我正在使用的插件与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();
        }
    }   
}

2 个回复
最合适的回答,由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 :)
但是要小心,因为您可能会丢失设置的选项,所以一定要先从数据库中获取它们。或创建备份选项。然后,清除缓存并重试。

SO网友:lkraav

我只是在页面上与之斗争。ly使用W3TC,然后使用Memcached作为对象缓存。

正在查找at how ai1ec has solved it 解决方案似乎是:

wp_cache_delete( \'alloptions\', \'options\' );
page证实了这一点。ly在我讨论这个问题的支持票中找到。

相关推荐

Cache of site on browser

我正在制作一个wordpress网站,它包含一个媒体链接。当服务器上的媒体文件发生更改时,不会在我的网站上进行更新。要查看我的新媒体,我必须在浏览器中打开“新建”选项卡,否则它会在媒体缓存到浏览器中时显示以前的结果。即使我刷新页面,它也会显示以前的结果。要查看更新的结果,我只需在“新建”选项卡中打开我的网站。我怎样才能解决这个问题。