惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cisco Talos Blog
Cisco Talos Blog
T
Tenable Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
I
Intezer
C
Cyber Attacks, Cyber Crime and Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Scott Helme
Scott Helme
C
Cisco Blogs
T
Tor Project blog
P
Privacy International News Feed
Forbes - Security
Forbes - Security
S
Schneier on Security
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Privacy & Cybersecurity Law Blog
Know Your Adversary
Know Your Adversary
T
The Exploit Database - CXSecurity.com
Security Latest
Security Latest
T
Threatpost
S
Security @ Cisco Blogs
H
Heimdal Security Blog
L
LINUX DO - 热门话题
N
News | PayPal Newsroom
N
News and Events Feed by Topic
Hugging Face - Blog
Hugging Face - Blog
T
Troy Hunt's Blog
WordPress大学
WordPress大学
腾讯CDC
V
V2EX
IT之家
IT之家
P
Proofpoint News Feed
S
Securelist
Hacker News: Ask HN
Hacker News: Ask HN
T
Threat Research - Cisco Blogs
爱范儿
爱范儿
雷峰网
雷峰网
Spread Privacy
Spread Privacy
Application and Cybersecurity Blog
Application and Cybersecurity Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Recent Commits to openclaw:main
Recent Commits to openclaw:main
The Cloudflare Blog
美团技术团队
月光博客
月光博客
博客园 - Franky
小众软件
小众软件
V
Vulnerabilities – Threatpost
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志

每日一语 – QingZhao 青找生活

暂无文章

给博客添加随机一言(小工具版) | QingZhao 青找生活
By qingzhao · 2025-11-29 · via 每日一语 – QingZhao 青找生活

这里提供两种在WordPress小工具中实现“一言”功能的完整代码方案:基础版和API版。这两种方案都已整合进WordPress小工具系统中,你可以直接使用。

两种一言小工具实现方案

特性基础版 (本地句子库)API版 (远程数据源)
数据来源本地存储的句子远程API接口
性能加载更快,不依赖外部服务依赖API响应速度
稳定性更稳定,不受第三方服务影响依赖API的稳定性
内容多样性固定,需手动更新自动更新,内容更丰富
适用场景需要稳定、快速展示,内容固定的用户希望内容常换常新,不介意外部调用的用户

基础版:本地句子库小工具

基础版小工具使用本地存储的句子,加载速度快且稳定。

完整代码

将以下代码添加到您当前主题的 functions.php 文件中:

<?php
// 基础版一言小工具 - 使用本地句子库
class Local_Hitokoto_Widget extends WP_Widget {

    // 初始化小工具
    function __construct() {
        parent::__construct(
            'local_hitokoto_widget',
            __('一言(基础版)', 'text_domain'),
            array('description' => __('显示本地随机一言', 'text_domain'))
        );
    }

    // 小工具前台显示
    public function widget($args, $instance) {
        $title = apply_filters('widget_title', $instance['title']);
        
        echo $args['before_widget'];
        if (!empty($title)) {
            echo $args['before_title'] . $title . $args['after_title'];
        }
        
        echo '<div class="hitokoto-content">';
        echo $this->get_random_hitokoto();
        echo '</div>';
        echo $args['after_widget'];
    }

    // 小工具后台表单
    public function form($instance) {
        $title = !empty($instance['title']) ? $instance['title'] : __('一言', 'text_domain');
        ?>
        <p>
            <label for="<?php echo $this->get_field_id('title'); ?>">标题:</label>
            <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" 
                   name="<?php echo $this->get_field_name('title'); ?>" type="text" 
                   value="<?php echo esc_attr($title); ?>" />
        </p>
        <p>此小工具从本地句子库中随机显示一句话。</p>
        <?php
    }

    // 更新小工具设置
    public function update($new_instance, $old_instance) {
        $instance = array();
        $instance['title'] = (!empty($new_instance['title'])) ? strip_tags($new_instance['title']) : '';
        return $instance;
    }

    // 获取随机一言(核心函数)
    private function get_random_hitokoto() {
        // 本地句子库 - 在此处添加或修改您喜欢的句子
        $sayings = array(
            "道可道,非常道。名可名,非常名。",
            "路漫漫其修远兮,吾将上下而求索。",
            "不积跬步,无以至千里;不积小流,无以成江海。",
            "Hello, World!",
            "Stay Hungry, Stay Foolish.",
            "代码如诗,简约至上。",
            "我们遇到的每个平凡瞬间,都是连续发生的奇迹。",
            "长太息以掩涕兮,哀民生之多艰。",
            "敏而好学,不耻下问。",
            "桃李不言,下自成蹊。"
        );
        
        // 随机返回一句话
        return $sayings[array_rand($sayings)];
    }
}

// 注册小工具
function register_local_hitokoto_widget() {
    register_widget('Local_Hitokoto_Widget');
}
add_action('widgets_init', 'register_local_hitokoto_widget');
?>

使用说明

  1. 将上述代码添加到您主题的 functions.php 文件中
  2. 进入WordPress后台的【外观】→【小工具】
  3. 在可用小工具列表中找到”一言(基础版)”
  4. 将其拖拽到侧边栏或其他小工具区域,并可选择性地设置一个自定义标题
  5. 保存后即可在前台看到效果

自定义句子

要修改显示的句子,请编辑代码中的 $sayings 数组,您可以在其中添加、删除或修改任何句子,每句用双引号包围,用英文逗号分隔。

基础版扩展:从文本文件读取句子

如果您希望更方便地管理句子,可以修改基础版的 get_random_hitokoto 方法,使其从文本文件读取:

private function get_random_hitokoto() {
    // 从主题目录下的 hitokoto.txt 文件读取句子
    $file_path = get_template_directory() . '/hitokoto.txt';
    
    if (file_exists($file_path)) {
        $sayings = file($file_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
        if (!empty($sayings)) {
            return $sayings[array_rand($sayings)];
        }
    }
    
    // 如果文件不存在或为空,返回默认句子
    return "细水长流,宁静致远。";
}

使用此方法,您需要在主题根目录创建 hitokoto.txt 文件,每行存放一句话。

API版:远程一言接口小工具

API版小工具调用远程一言接口,内容更加丰富多样。

完整代码

将以下代码添加到您当前主题的 functions.php 文件中:

<?php
// API版一言小工具 - 调用远程接口
class API_Hitokoto_Widget extends WP_Widget {

    // 初始化小工具
    function __construct() {
        parent::__construct(
            'api_hitokoto_widget',
            __('一言(API版)', 'text_domain'),
            array('description' => __('调用远程API显示随机一言', 'text_domain'))
        );
    }

    // 小工具前台显示
    public function widget($args, $instance) {
        $title = apply_filters('widget_title', $instance['title']);
        
        echo $args['before_widget'];
        if (!empty($title)) {
            echo $args['before_title'] . $title . $args['after_title'];
        }
        
        echo '<div class="hitokoto-content" id="' . $this->id . '-content">';
        echo $this->get_hitokoto_content();
        echo '</div>';
        echo $args['after_widget'];
    }

    // 小工具后台表单
    public function form($instance) {
        $title = !empty($instance['title']) ? $instance['title'] : __('一言', 'text_domain');
        $api_type = !empty($instance['api_type']) ? $instance['api_type'] : 'hitokoto';
        ?>
        <p>
            <label for="<?php echo $this->get_field_id('title'); ?>">标题:</label>
            <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" 
                   name="<?php echo $this->get_field_name('title'); ?>" type="text" 
                   value="<?php echo esc_attr($title); ?>" />
        </p>
        <p>
            <label for="<?php echo $this->get_field_id('api_type'); ?>">API源:</label>
            <select class="widefat" id="<?php echo $this->get_field_id('api_type'); ?>" 
                    name="<?php echo $this->get_field_name('api_type'); ?>">
                <option value="hitokoto" <?php selected($api_type, 'hitokoto'); ?>>一言官网 (hitokoto.cn)</option>
                <option value="other" <?php selected($api_type, 'other'); ?>>其他API</option>
            </select>
        </p>
        <p>此小工具调用远程API获取随机一言。</p>
        <?php
    }

    // 更新小工具设置
    public function update($new_instance, $old_instance) {
        $instance = array();
        $instance['title'] = (!empty($new_instance['title'])) ? strip_tags($new_instance['title']) : '';
        $instance['api_type'] = (!empty($new_instance['api_type'])) ? strip_tags($new_instance['api_type']) : 'hitokoto';
        return $instance;
    }

    // 获取一言内容
    private function get_hitokoto_content() {
        $api_type = !empty($this->instance['api_type']) ? $this->instance['api_type'] : 'hitokoto';
        
        // 根据选择的API类型调用不同的接口
        if ($api_type === 'hitokoto') {
            return $this->get_hitokoto_api();
        } else {
            // 这里可以扩展其他API接口
            return $this->get_hitokoto_api();
        }
    }

    // 调用一言官网API
    private function get_hitokoto_api() {
        $response = wp_remote_get('https://v1.hitokoto.cn/', array(
            'timeout' => 10 // 设置10秒超时
        ));
        
        // 检查API响应是否正常
        if (is_wp_error($response)) {
            return '微风起时,沉默亦被聆听。'; // API调用失败时的备用句子
        }
        
        $body = wp_remote_retrieve_body($response);
        $data = json_decode($body, true);
        
        // 检查JSON解析是否成功且包含所需字段
        if (json_last_error() === JSON_ERROR_NONE && isset($data['hitokoto'])) {
            $result = $data['hitokoto'];
            if (isset($data['from']) && !empty($data['from'])) {
                $result .= " ——" . $data['from'];
            }
            return $result;
        } else {
            return '溪流汇海,聚萤映夜。'; // JSON解析失败时的备用句子
        }
    }
}

// 注册小工具
function register_api_hitokoto_widget() {
    register_widget('API_Hitokoto_Widget');
}
add_action('widgets_init', 'register_api_hitokoto_widget');
?>

使用说明

  1. 将上述代码添加到您主题的 functions.php 文件中
  2. 进入WordPress后台的【外观】→【小工具】
  3. 在可用小工具列表中找到”一言(API版)”
  4. 将其拖拽到侧边栏或其他小工具区域
  5. 可以设置小工具标题和选择API源(目前主要支持一言官网API)
  6. 保存后即可在前台看到效果

样式美化

将以下CSS代码添加到主题的 style.css 文件中,可以美化一言的显示效果:

/* 一言小工具样式 */
.hitokoto-content {
    font-style: italic;
    color: #555;
    text-align: center;
    padding: 15px;
    margin: 10px 0;
    border-left: 3px solid #4CAF50;
    background-color: #f9f9f9;
    line-height: 1.6;
}

/* 鼠标悬停效果 */
.hitokoto-content:hover {
    background-color: #f0f0f0;
    transition: background-color 0.3s ease;
}

注意事项

  1. 备份重要数据:在修改主题的 functions.php 文件前,建议先备份该文件
  2. 主题兼容性:如果更换主题,需要将代码重新添加到新主题的 functions.php 文件中
  3. API稳定性:API版依赖外部服务,如果一言官网API无法访问,将显示备用句子
  4. 性能考虑:如果网站访问量大,建议使用基础版或考虑缓存API响应,以减少服务器负载

这两种方案各有优势,您可以根据自己的需求选择使用。如果有任何疑问或需要进一步的帮助,请在下方留言。