WordPress暂时获取短码

时间:2017-11-13 作者:loliki

我有一个小的短代码,它基本上从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;
}

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

使用此选项,而不是定义的行$days (您的第二行):

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

... 
可能有点粗糙,但你明白了。

SO网友:Drupalizeme

我将其作为临时名称添加到变量中,以便于处理。

接下来,我检查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

结束

相关推荐

Append HTML Using Shortcode

我写了一个WordPress插件,它有一个短代码。短代码位于WordPress页面上,该页面上有其他短代码。其他短代码输出HTML,我想将我的短代码中的HTML附加到该输出中。我想知道是否可以使用DOMDocument和getElementById来实现这一点。WordPress页面如下所示:[Shortcode #1] [Shortcode #2] [Shortcode #3] [date_info] 我的插件执行以下操作:function