背景-我在函数中创建了一个短代码。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经验的人都能对我的方法和建议的代码发表评论吗?
最合适的回答,由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将再次运行查询并保存一个新标记。
未测试代码我觉得如果你在边栏上显示它,你可以尝试创建小部件而不是短代码。但对于这两种方式,解决方案是相似的。