web-dev-qa-db-fra.com

Transitoires Wordpress pour un shortcode

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;
}
4
Radu033

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.

4
GDY

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
4
Drupalizeme