搞砸了瞬时API-刷新时被刷新

时间:2014-10-04 作者:Mayeenul Islam

遵循_s 主题我想用Transient制作我自己版本的帖子类别列表,下面是我制作的:

function my_blog_categories() {
    global $post;
    if ( ( $get_post_categories = get_transient( \'this_blog_categories\' ) === FALSE ) ) {
        $get_post_categories = get_the_category_list( \' | \', \'\', $post->ID );

        set_transient( \'this_blog_categories\', $get_post_categories );
    }
    return $get_post_categories;
}

function my_blog_transient_flusher() {
    delete_transient( \'this_blog_categories\' );
}
add_action( \'edit_category\', \'my_blog_transient_flusher\' );
add_action( \'save_post\',     \'my_blog_transient_flusher\' );
使用WP Optimize,如果我清理瞬态,在第一次刷新时,我可以看到帖子下面的类别。但在第二次首页刷新时,它们就消失了。

请不要那样,没有return $get_post_categories; 它根本不起作用。但我知道的是get_the_category_list() 自身正在返回数据。

因此,我处于一种笨拙的状态——不知道我做错了什么!如有任何帮助,我们将不胜感激。

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

第一个问题是IF语句中的括号不正确。

if ( ( $get_post_categories = get_transient( \'this_blog_categories\' ) === FALSE ) )

应该是:

if ( ( $get_post_categories = get_transient( \'this_blog_categories\' ) ) === false )

您希望分配该值,然后测试该值是否为false。由于括号不正确,您要做的是将transient与false进行比较,然后将比较结果分配给$get\\u post\\u类别。在PHP中,比较的优先级高于赋值。

这可能会解决您的问题。但是,这里还有另一个问题:

set_transient( \'this_blog_categories\', $get_post_categories );

瞬态应具有到期时间。否则,瞬态将永远不会过期,也永远不会刷新数据。

结束

相关推荐

Transients API and multisite

我们正在使用Atlas HTML站点地图插件,该插件使用transients API缓存站点地图,调用如下:set_transient( \'dmac_html_sitemap\', $output, 60*60*24*7 ); 现在,我们还有一个多站点设置,我想知道瞬态存储在哪里,WP multisite是否将它们分开。它将选项分开,因为每个站点(博客)都有自己的DB表前缀(例如wp\\U 29\\U选项)。我在某个地方读到,瞬态可以用memcached存储,所以我猜后端存储是可插入的。这个问