如何使用瞬变和变量

时间:2015-02-02 作者:akmur

我正在尝试实现瞬态片段,我一直在做这里建议的事情:http://css-tricks.com/wordpress-fragment-caching-revisited/

虽然它适用于页眉、页脚和登录页,但在适用于包含变量的部分时,我遇到了一些问题。

这是我在函数中的代码。php:

function fragment_cache($key, $ttl, $function) {
  if ( is_user_logged_in() ) {
    call_user_func($function);
    return;
  }
  $key = apply_filters(\'fragment_cache_prefix\', \'fragment_cache_\').$key;
  $output = get_transient($key);
  if ( empty($output) ) {
    ob_start();
    call_user_func($function);
    $output = ob_get_clean();
    set_transient($key, $output, $ttl);
  }
  echo $output;
}
这里是我的代码的简化版本,只显示在一个页面上(我使用的是高级自定义Fieds转发器,但我认为这与此问题无关):

while ( have_rows(\'images\') ): the_row();
  fragment_cache(\'cms_images_text\' . $post->ID, WEEK_IN_SECONDS, function() {
    $gallery_image = get_sub_field(\'image\');
    $gallery_image_small = $gallery_image[\'sizes\'][\'square-small\'];
    echo \'<img src="\' . $gallery_image_small .  \'">;
  });
endwhile;
我的问题是,在这个while循环中,我返回了四个相同的图像。我怎样才能解决这个问题?

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

对于每次迭代,您都将数据保存在同一个键下的循环中。如果希望每个循环都有唯一的值,则必须将循环当前迭代的索引添加到键中。类似于:

$i = 0;
while ( have_rows(\'images\') ): the_row();
  fragment_cache(\'cms_images_text_\' . $i . \'_\' . $post->ID, WEEK_IN_SECONDS, function() {
    $gallery_image = get_sub_field(\'image\');
    $gallery_image_small = $gallery_image[\'sizes\'][\'square-small\'];
    echo \'<img src="\' . $gallery_image_small .  \'">\';
  });
  $i++;
endwhile;
或者只需在一个键下保存整个循环的内容。

结束

相关推荐

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存储,所以我猜后端存储是可插入的。这个问