J'ai un petit shortcode qui prend essentiellement les données d'un fichier JSON et les affiche sur une page. Les données dans JSON sont mises à jour chaque semaine. Comment puis-je utiliser un transitoire pour que les données de la semaine en cours soient mises en cache?
Voici mon shortcode
function week_agenda() {
$days = json_decode(file_get_contents('json_file'));
unset($days[0]);
ob_start();
?>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th> Title </th>
<th>Content</th>
</tr>
</thead>
<tbody>
<?php foreach($days as $data) { ?>
<tr>
<td><?php echo $data[0]; ?></td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<?php
$output = ob_get_clean();
return $output;
}
Utilisez ceci à la place de la ligne dans laquelle vous définissez $days
(votre deuxième ligne):
$transient = get_transient( 'your_transient_key' );
if( !$transient ):
$days = file_get_contents( 'json_file' );
set_transient( 'your_transient_key', $days, DAY_IN_SECONDS*7 );
else:
$days = $transient;
endif;
$days = json_decode( $days );
...
Peut-être un peu difficile, mais vous avez l'idée.
Je lui ajoute le nom transitoire à une variable pour le gérer plus facilement.
Ensuite, je vérifie si la valeur renvoyée par get_transient
est fausse et met à jour le nom de la variable et le transitoire. Vous pouvez essayer celui-ci:
$transient_name = 'cached_json_data';
if ( false === ( $json_data = get_transient( $transient_name ) ) ) {
$json_data = json_decode(file_get_contents('json_file'));
set_transient( $transient_name, $json_data, WEEK_IN_SECONDS );
}
//normal code
set_transient
Vous n'avez pas besoin de sérialiser les valeurs. Si la valeur doit être sérialisée, elle le sera avant sa définition.
Constantes WP 3.5+
MINUTE_IN_SECONDS = 60 (seconds)
HOUR_IN_SECONDS = 60 * MINUTE_IN_SECONDS
DAY_IN_SECONDS = 24 * HOUR_IN_SECONDS
WEEK_IN_SECONDS = 7 * DAY_IN_SECONDS
MONTH_IN_SECONDS = 30 * DAY_IN_SECONDS
YEAR_IN_SECONDS = 365 * DAY_IN_SECONDS