web-dev-qa-db-ja.com

ショートコード用のWordpressのトランジェント

私は基本的にJSONファイルからデータを取得してページに表示する小さなショートコードを持っています。 JSONのデータは毎週更新されますが、今週のデータがキャッシュされるようにトランジェントを使用する方法を教えてください。

これが私のショートコードです

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

$daysを定義した行の2行目ではなく、これを使用してください。

$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 );

... 

ちょっと荒いかもしれませんが、あなたはアイデアを得ます。

4
GDY

私はそれをより簡単に扱うために変数に一時的な名前を追加します。

次に、 get_transient からの戻り値がfalseかどうかを確認し、変数名と一時変数を更新します。あなたはこれを試すことができます:

    $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

値をシリアル化する必要はありません。値をシリアル化する必要がある場合は、設定前にシリアル化されます。

定数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