如何从Widget()函数更新Widget?

时间:2014-10-25 作者:Hans Spieß

我正在尝试创建一个简单的linkroll小部件来显示最近的https://pinboard.in 通过API链接。为了最大限度地提高加载速度,我想在一个小部件字段中缓存链接列表,以及最后获取它的时间戳。

现在,如果定义的时间结束了,我想通过cURL重新加载链接列表,并将其再次保存在widget字段中。如何从update()函数外部执行此操作?

我的代码:

// display widget
function widget($args, $instance) {

    extract( $args );

    // get widget title
    $title          = apply_filters(\'widget_title\', $instance[\'title\']);

    //  get options
    $token          = $instance[\'token\'];
    $tags           = $instance[\'tags\'];
    $unread         = $instance[\'unread\'];
    $range          = $instance[\'range\'];

    // update linklist based on cache validity
    $isvalid = $this->_check_valid_cache( $instance[\'expires\'], $range );
    if ( $isvalid === TRUE ) {
        $cache         = $instance[\'cache\'];
        $expires       = $instance[\'expires\'];
    } else {
        $cache         = $this->_get_recent( $token );
        $expires       = $isvalid;
        /* --> does not work!! */
        $this->update($instance, $instance);
    }
    /* ...display widget... */

}

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

嗯。实际上,我从未想过要将小部件实例用作缓存。我也从未见过这样的实现。

这是一个很有创意的想法,因此很难准确指出实施的好处和问题。对于初学者update() 实际上并没有保存任何内容,它只是用来检查实际的保存,我不会从快速查看中说出保存在哪里,因为它被抽象得更深。

根据我的经验,更为传统的实现是使用更为传统的方法(如瞬态)进行缓存,并将其绑定到API,而不是小部件。

假设用户将两个不同的小部件实例放在两个不同的侧栏中,但配置方式相同。他们将以双倍的速率轮询API,而实际上他们需要API中完全相同的数据,并且可以(而且应该)共享这些数据。

结束

相关推荐

将所有wp_Options发送到javascript文件会有危险吗?

我注意到wordpress允许我通过wp\\u localize\\u脚本将wordpress选项发送到javascript:wp_localize_script( $this->plugin_slug . \'-plugin-script\', \'wp_options\', wp_load_alloptions() ); 这样,我的javascript就可以访问不同的设置,例如一周从哪一天开始,以及用户选择的日期格式。是否存在任何风险,将所有选项作为变量发送给js,或者这样可以吗?我注