博客目前就是个自娱自乐的地方,没什么访问量,纯粹是折腾给自己看的。挂了些 VPS 的 aff 链接,其实主要是 BWH 的。那些纯粹是优惠信息的文章,默认不在首页显示。昨天突发奇想,让它们随机显示一篇在首页露露脸也好,说不定有需要的看上了呢?
于是就有了这篇文章。
需求:首页第二篇文章后随机显示一篇来自优惠信息分类的文章,更进一步,判断这个分类最近是否有新文章,有就显示最新的文章,没有才显示随机文章。
以前折腾过类似功能,现在弄起来不是很难。
WordPress The Loop 里面有个 $current_post 变量,可以取得当前文章的索引(序号)。『$current_post:(available during The Loop) Index of the post currently being displayed.』可以通过判断它的值,就可以实现将随机文章插入到第 X 篇文章后。
接着是判断最近(比如一周内)是否有新文章,这个也好实现。WordPress 3.7 版本后的 WP_Query 日期参数新增 date_query (array),通过这个参数,很方便就能获取指定分类指定时间内的文章。
下面是 index.php 实现参考代码:
<?php
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$args = array(
'category__not_in' => 888,//排除分类id:888
'paged' => $paged
);
$wp_query = new WP_Query($args);//主循环
$week = date( 'W' );
$year = date( 'Y' );
$args_rand = array(
'category__in' => 888,//选择分类文章id:888
'posts_per_page' => 1,//每页显示一篇
'orderby' => 'rand'
);//888分类随机文章
$args_week = array(
'category__in' => 888,
'date_query' => array(//7天内文章
array(
'column' => 'post_date_gmt',
'after' => '7 days ago',
),
),
'posts_per_page' => 1,
'paged' => 1//只显示第一页
);//888分类一周内文章
$wp_query_week = new WP_Query( $args_week );//获取一周内文章
if ( $wp_query->have_posts() ) {
while ( $wp_query->have_posts() ) : $wp_query->the_post();
get_template_part( 'content', get_post_format() );
if ($wp_query->current_post == 1) {//第 2 篇文章后
if ( $wp_query_week->have_posts() ) {
while ( $wp_query_week->have_posts() ) : $wp_query_week->the_post();
get_template_part( 'content', get_post_format() );
endwhile;
wp_reset_postdata();
} else {
$wp_query_rand = new WP_Query($args_rand);
if ( $wp_query_rand->have_posts() ) {
while ( $wp_query_rand->have_posts() ) : $wp_query_rand->the_post();
get_template_part( 'content', get_post_format() );
endwhile;
wp_reset_postdata();
}
}
}
endwhile;
} else {
get_template_part( 'content', 'none' );
}
?>
注意:需要跟实际使用 WordPress 主题作相应修改。
WordPress 4.8.2 测试通过。
哈哈,目前你首页的前几篇文章都是折腾类……
@皮皮 嗯,瞎折腾。
@老头 刚刚收到你的回覆邮件提醒全是乱码,是不是我太帅呢?
@皮皮 应该是我代码的编码问题,现在好了?
@皮皮 打扰了,现在应该可以了,刚拿我自己的 outlook 邮箱测试没问题。
@老头 现在可以了。
@皮皮 谢谢反馈。
这个功能不错,我是在feed里面排除了一些分类,首页的都显示的,先收藏。
@从良未遂 feed 里面以前我也排除了一些,不过现在好像不排除了。
6的飞起~~
@夜枫 啥意思?
我就不会玩这么高大上的,一般直接循环里插入一个模板,然后在模板里随机,可能连首页已显示的文章都不排除。
@不亦乐乎 我以前也这么干。
广告利器,收藏了,不过我那里历史日志几乎没人看。
@木瓜园 我的也是,纯粹是折腾着自己玩呢。
爱生活,会折腾!
@山野愚人居 生命不息,折腾不止。
先收藏下,很能折腾哈。
@郑永 有闲心的时候才能折腾。
噢,必须用来插播广告!
@JJlin 插历史文章也可以的,哈哈。
嗯。
这个倒是有用。。。对于长期不更新的博客和网站,我看好多都在这么干
@牧羊人 说到痛点了~