1. 引言

用过Corepress主题或者浏览过我网站主页的人应该都体验过Corepress的“随机句子”功能。如下图右侧所示:

图片展示

Corepress提供了四个分类随机句子,分别是:

(链接我已经抽取出来了,可以直接点开看)

 

这个功能的底层是基于api实现的,每次调用时会随机生成一条文字作为结果返回。

但就我个人而言,我不是很喜欢里面随机出来的一些句子,于是就有了个想法:给原本Corepress的句子功能增加一个分类,依然是随机返回句子,但句子库由我定义。

 

感谢百度文心一言阿里通义千问的代码技术支持,让不会php的我通过php实现了该功能。

(但这两家ai问题还是挺大的,好几次都没理解我的意思,即使反馈了错误也好几次没修改对)

 

 

2. 本方案思路

 

共四步:

  1. 服务器本地txt文件存储所有句子,每句通过换行符分隔。
  2. php文件负责读取该文件并随机返回一条
  3. 修改主题的前端代码,使得我们可以在后台的外观 > 菜单中选择Corepress的句子模块添加上我们自定义的分类选项
  4. 添加逻辑,使得选择了我们的自定义选项,能够正确获得随机句子。

下面直接开始:

3. 创建本地句子库

 

这部分最简单,创建一个文件夹,把所有句子都扔进去就行。

(我是以UTF-8编码形式添加的,后面读取也是UTF-8编码)

本例创建一个名为luxun.txt的文件,摘抄了些鲁迅名言:

luxun

至于存放在服务器存储目录的那里,就看个人选择了,只要保证后面创建的php文件能读取到就ok,本例存放在网站根目录下的 random 文件夹,即/georgewahson.club/random/luxun.txt

 

4. 新建php文件

创建一个php文件,文件名随意。本例php文件命名为 random1.php ,存放于与上面txt相同文件夹,即 /georgewahson.club/random/random1.php 后续也是通过该地址进行访问。

 

php全部代码如下:

<?php  
$filename = "luxun.txt";  
$lines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);  
if (count($lines) > 0) {  
    $random_line = $lines[array_rand($lines)];  
    header('Content-Type: text/plain');  
    echo mb_convert_encoding($random_line, 'UTF-8', 'auto');  
} else {  
    http_response_code(404);  
    echo 'File not found.';  
}  
?>
  •  注意:记得把上面 luxun.txt 替换成上一步的txt文件的相对路径,否则php读取不到txt句库文件。

 

此时,就可以通过访问:网站网址/random1.php的相对路径进行访问了。即:www.georgewahson.club/random/random1.php,而且每次刷新都会随机生成(返回)一条句子。

结果

 

5. 补充

以上部分可以实现增添一个新的句子分类“鲁迅”,如果想要再新增一个分类,最简单粗暴的方法就是再创建一个php文件和txt文件。就可以通过访问不同的php从不同的txt随机生成句子了。[clickshow](这也是为什么上面起名是 random1.php ,因为后面还可以有2 3 4)[/clickshow]

 

当然有更好的实现方法,向Corepress的句子分类链接一样,通过网页传入参数实现链接复用。这个以后会考虑修改。[clickshow](现阶段对我需求不大)。[/clickshow]

 

6.  修改前端代码

此时我们只是创建成功了一个链接,能够随机生成文本,但还没实际应用起来。

要想实际运用,得让wordpress小工具中的corepress句子模块增加选项,使得每次调用都能指向我们的链接。

配置成功后如下图所示:

sentenceModule

6.1 添加选择项

来到coreprss主题下的widgets 文件夹[clickshow]wordpress文件夹下的wp-content/themes/CorePress/widgets[/clickshow],修改sentence.php ,从36行位置添加。添加后结果如下:

sentence

        <p>
            <label for="<?php echo $this->get_field_id('type'); ?>">显示类型</label>
            <select name="<?php echo $this->get_field_name('type'); ?>">
                <option value="djt" <?php if ($type == 'djt') echo 'selected' ?>>毒鸡汤</option>
                <option value="tg" <?php if ($type == 'tg') echo 'selected' ?>>舔狗日记</option>
                <option value="yy" <?php if ($type == 'yy') echo 'selected' ?>>一言</option>
                <option value="sh" <?php if ($type == 'sh') echo 'selected' ?>>社会语录</option>
                <option value="luxun" <?php if ($type == 'luxun') echo 'selected' ?>>鲁迅名言</option>
                <option value="threebody" <?php if ($type == 'threebody') echo 'selected' ?>>三体语录</option>
            </select>
        </p>

 

6.2 添加选择逻辑

目前只是设置了选项,显然我们没传入网址。网页:你句库呢?php:我不到啊!

修改coreprss主题下的geekframe 文件夹的 ajax.php ,大约在680行的位置。添加判断分支,使得我们在菜单选择的项目按指定链接获取句子。

ajax

function corepress_get_widget_sentence()
{
    $type = $_GET['type'];
    $data = [];
    $data['code'] = 200;
    if ($type == 'djt') {
        $data['data'] = file_get_contents('https://api.lovestu.com/corepress/sentence/?action=sentence&type=1');
    } elseif ($type == 'tg') {
        $data['data'] = file_get_contents('https://api.lovestu.com/corepress/sentence/?action=sentence&type=2');
    } elseif ($type == 'yy') {
        $data['data'] = file_get_contents('https://api.lovestu.com/corepress/sentence/?action=sentence&type=3');
    } elseif ($type == 'sh') {
        $data['data'] = file_get_contents('https://api.lovestu.com/corepress/sentence/?action=sentence&type=4');
    } elseif ($type == 'luxun') {
        $data['data'] = file_get_contents('https://www.georgewahson.club/random/random1.php');
    } elseif ($type == 'threebody') {
        $data['data'] = file_get_contents('https://www.georgewahson.club/random/random2.php');
    } else {
        $data['data'] = file_get_contents('https://api.lovestu.com/corepress/sentence/?action=sentence&type=1');
    }
    wp_die(json_encode($data));
}

 

至此,All finish!

Result:

all_result