J'essaie d'implémenter des fragments transitoires, j'ai fait ce qui est suggéré ici: http://css-tricks.com/wordpress-fragment-caching-revisited/
Bien que cela fonctionne pour les en-têtes, les pieds de page et les pages de destination, je ne parviens pas à le faire fonctionner pour les sections contenant des variables.
Ceci est mon code dans functions.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;
}
Et voici une version simplifiée de mon code sur une seule page (j'utilise des répéteurs Advanced Custom Fieds, mais je ne pense pas à ce problème):
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;
Mon problème est que dans cette boucle while, on me renvoie quatre images identiques. Comment puis-je résoudre ce problème?
Vous sauvegardez les données dans une boucle sous la même clé pour chaque itération. Vous devrez ajouter l'index de l'itération actuelle de la boucle à la clé si vous voulez une valeur unique pour chaque. Quelque chose comme:
$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;
Ou peut-être simplement sauvegarder le contenu de la boucle entière sous une seule clé.