显示随机标签,但使用cron控制更改频率

时间:2014-06-16 作者:Paul Brown

背景-我在函数中创建了一个短代码。php,它将带有链接和描述的单个随机标记添加到我的侧边栏中的小部件中。这是我现有的代码。。。

function skips_get_random_tags() {
    $args = array(\'exclude\' => \'\');
        $alltags = get_tags( $args );
        shuffle($alltags);
        $count=0;
        if ($alltags) {
            foreach($alltags as $tag) {
                $count++;
                return \'<H5>Random App: <a href="\'.get_tag_link($tag->term_id).\'">\'.$tag->name.\'</a></H5><p class="random-tag-description skips-answer">\'.$tag->description.\'</p>\';
        if( $count >0 ) break;
        }
    }
}

add_shortcode( \'random-tag\', \'skips_get_random_tags\' );
它工作得很好,只是每次加载页面时都会运行(受缓存周期的限制),并且因此会在每个页面上生成不同的结果。我想安排它每天运行一次,并且一直在阅读关于Cron的文章,这似乎是解决方案。查看了编解码器后,我认为我需要如下编辑代码(似乎只是添加一些CRON代码来触发代码上方的函数并将其链接到函数)。。。

function prefix_activation() {
    wp_schedule_event( time(), \'daily\', \'skips_daily_event_hook\' );
}

add_action( \'skips_daily_event_hook\', \'skips_get_random_tags\' );
/**
 * On the scheduled action hook, run the function.
 */

    function skips_get_random_tags() {
    $args = array(\'exclude\' => \'\');
        $alltags = get_tags( $args );
        shuffle($alltags);
        $count=0;
        if ($alltags) {
            foreach($alltags as $tag) {
                $count++;
                return \'<H5>Random App: <a href="\'.get_tag_link($tag->term_id).\'">\'.$tag->name.\'</a></H5><p class="random-tag-description skips-answer">\'.$tag->description.\'</p>\';
        if( $count >0 ) break;
        }
    }
}

add_shortcode( \'random-tag\', \'skips_get_random_tags\' );
我怀疑我走了很长一段路,但我不想触发一个我无法阻止的CRON-任何有CRON经验的人都能对我的方法和建议的代码发表评论吗?

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

使用WordPress Transient API 相反这应该是这样的(修改了现有的shortcode函数)。

function skips_get_random_tags() {
    $transient_name = \'skips_random_tag\';
    $transient_expiration = 60 * 60 * 24; // 1 day

    if ( false === ( $tag = get_transient( $transient_name ) ) ) { // tag isn\'t found in transient so get it from WP database
        $args = array(\'exclude\' => \'\');
        $alltags = get_tags( $args );

        if(empty($alltags)){
            // no tag found show warning
            return false;
        }

        shuffle($alltags);   
        $tag = $alltags[0];

        set_transient( $transient_name, $tag, $transient_expiration ); // set the transient
    }

    return \'<H5>Random App: <a href="\'.get_tag_link($tag->term_id).\'">\'.$tag->name.\'</a></H5><p class="random-tag-description skips-answer">\'.$tag->description.\'</p>\';

}

add_shortcode( \'random-tag\', \'skips_get_random_tags\' );
解释这里发生的事情是。当您第一次运行代码时,WordPress将从数据库中提取标签,并设置到期时间为24小时的瞬态。如果代码在接下来的24小时内再次运行,则保存在transient中的标记将关闭,直到过期。当它过期时,WordPress将再次运行查询并保存一个新标记。

未测试代码

结束

相关推荐

Global functions on WPMU

我在一个多站点环境中工作,所有站点都是相关的。最近的许多发展都要求我将某些功能复制并粘贴到许多不同的主题文件夹中,如果我需要到处更新它们,就会出现问题。拥有全局“functions.php”文件的最佳方式是什么?我的想法是要么在themes文件夹中包含一个文件并包含它,要么创建一个插件并启用该插件。