目的地-Destination 前程似锦、未来可期、寻得良人、共赴白头,祝你也祝我。
博主 目的地-Destination
沪ICP备16003146号-2沪公网安备 31010702004922号萌ICP备20238488号博主 昨天 17:25 在线自豪地使用 Typecho 建站搭配使用 🌻Sunny 主题当前在线 19 人
歌曲封面 未知作品

沪ICP备16003146号-2

沪公网安备 31010702004922号

萌ICP备20238488号

网站已运行 7 年 342 天 1 小时 1 分

Powered by Typecho & Sunny

20 online · 48 ms

Title

Typecho访问固定链接随机跳转到某一篇文章的方法

Chrison

·

烂笔头

·

Article
⚠️ 本文最后更新于2023年02月14日,已经过了616天没有更新,若内容或图片失效,请留言反馈

这算是个小功能吧。访问固定链接,每次打开都会随机跳转到某一篇文章。(不是随机文章列表!)
👇🏻举个栗子👇🏻下面的链接每次打开,都是不同文章。
随机文章

创建主题模板文件

打开服务器目录至/themes/当前模板文件夹下,创建一个新文件,如page.random.php

♾️ 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,只有一个分类时,不需要逗号(英文状态下)。

♾️ php 代码:
$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 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

现在已有 188 次阅读,2 条评论,0 人点赞
Comment:共2条
发表
  1. 头像
    @
    海角七号
    🌝🌝🌚🌚
    · Chrome · 中国江苏省苏州市电信

    👍

    💖

    💯

    💦

    😄

    🪙

    👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
    1. 头像
      @
      吃💊
      · 火狐浏览器 · 中国江苏省苏州市电信

      👍

      💖

      💯

      💦

      😄

      🪙

      👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
搜 索 消 息 足 迹
你还不曾留言过..
你还不曾留下足迹..
博主 不再显示
博主