这算是个小功能吧。访问固定链接,每次打开都会随机跳转到某一篇文章。(不是随机文章列表!)
👇🏻举个栗子👇🏻下面的链接每次打开,都是不同文章。
随机文章
创建主题模板文件
打开服务器目录至/themes/当前模板文件夹
下,创建一个新文件,如page.random.php
。
<?php
/**
* 随机一篇文章
*
* @package custom
*/
if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?>
<?php
$db = Typecho_Db::get();
$sql = $db->select('MAX(cid)')->from('table.contents')
->where('status = ?','publish')
->where('type = ?', 'post')
->where('created <= unix_timestamp(now())', 'post');
$result = $db->fetchAll($sql);
$max_id = $result[0]['MAX(`cid`)'];
// 以上代码,是获取文章表里的最大文章id
$sql = $db->select('MIN(cid)')->from('table.contents')
->where('status = ?','publish')
->where('type = ?', 'post')
->where('created <= unix_timestamp(now())', 'post');
$result = $db->fetchAll($sql);
$min_id = $result[0]['MIN(`cid`)'];
// 以上代码,是获取文章表里的最小文章id
$result = NULL;
while($result == NULL) {
$rand_id = mt_rand($min_id,$max_id);
// 以上代码,是获取最小值-最大值直接的id
$sql = $db->select()->from('table.contents')
->where('status = ?','publish')
->where('type = ?', 'post')
->where('created <= unix_timestamp(now())', 'post')
->where('cid = ?',$rand_id);
// 以上代码,根据随机id获取文章相关信息
$result = $db->fetchAll($sql);
}
?>
<?php $target = Typecho_Widget::widget('Widget_Abstract_Contents')->filter($result['0']); ?>
<?php $this->response->redirect($target['permalink'],307); ?>
//将结果307跳转
配置独立页面
登录后台,独立页面,新建,选择自定义模板"随机一篇文章"。保存,即可访问。
特殊需求
上述方法,会随机读取所有文章,但是有时候,有的分类下的文章,我并不想读取。或者说,我只想固定某一个、某两个分类下的文章。
于是,我重改了SQL的代码。
将上面 根据随机id获取文章相关信息
部分的代码,进行替换。其中 1,2,3,4,5
的位置,替换成你的分类ID,只有一个分类时,不需要逗号(英文状态下)。
$sql=$db->select() ->from('typecho_contents')
->join('typecho_relationships', 'typecho_contents.cid = typecho_relationships.cid', Typecho_Db::LEFT_JOIN)
->where('typecho_relationships.mid in (1,2,3,4,5)','1')
->where('typecho_contents.status = ?','publish')
->where('typecho_contents.type = ?', 'post')
->where('typecho_contents.created <= unix_timestamp(now())', '1')
->where('typecho_contents.cid = ?',$rand_id);
大功告成
复制独立页面的链接。即可使用。
举个栗子··· 随机文章
重定向说明
300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent)选择一项操作,或提供操作列表供请求者选择。
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
👍
💖
💯
💦
😄
🪙
好友
目的地-Destination @海角七号👍
💖
💯
💦
😄
🪙