Typecho 主题:在文章中显示图片描述


叙述594 阅15 评

近期不断在折腾主题,友圈中有许多WordPress主题的博友,都有图片描述的显示功能,比如:雅余旅行漫记。我也想实现这个,装饰文章显示,下面是效果图,在图片底部都有描述显示。

yayu.jpg

sy.jpg

在bing和baidu搜索中,关于typecho在文章中显示图片描述的描述太少太少,搜索很久终于找到友圈中的立云图志,我们通过邮件交流了该图片描述显示的可能性。

鸣谢立云图志的解决思路(功能整理成了文档,也做了优化,比如可以选择性输出需要显示的图片描述 ),不仅给出了多种解决方法,还附带了代码!

番薯
▲ 番薯

本主题如何实现

有了思路,一步步解决,先找到Html显示我的图片位于figure,可以看到data-caption="番薯",新增的代码就可以获取图片标题并添加到图片下方,获取data-caption,排除.jpg和.png,只显示中文,将figcaption标签添加到figure标签下,就完成整个的逻辑。

figure.jpg

post.php搜索figure部分,我这里的主题pigeon采用的是js来显示文章图片,所以我采用了立云图志的在前端使用 JavaScript 脚本的思路,虽然之前的图片描述,比如 IMF_0001.jpg 这些都会输出,既然如此,我就把关于.jpg 都自动隐藏。这样子有了判断条件,就只会输出有中文的描述=标题,就不会把之前的各种.jpg都输出了。

在后台文章编辑器中显示:

![番薯][9]  则显示图片描述  
![番薯.jpg][10]   则不显示图片描述

立云图志点评缺点:使用 js 检查是否包含 .jpg,会导致这个过程滞后,表现为容器添加时,会出现布局在高度上的跳动。总的来说,是我目前我认为最简单的一种方法,有待改进。

更新

感谢蔷薇角落博主的帮助,在评论区留言了完整的PHP执行代码,解决了上诉布局跳动的缺点(V2024.05.19) 。

最后更新 2025-02-27
评论 ( 15 )
  1. 小赵同学

    图片这样处理 加上水印 确实高级了许多

    2025-02-26 21:39湖北省黄冈市回复
    1. 寻鹤 博主
      @小赵同学

      单独设计了水印,加上更好些,之前有被盗图的情况。

      2025-02-27 15:55广西回复
  2. 萧俊介

    我的话会在后端完成这个转换,这样就不会有跳动的问题了。

    2025-02-25 12:39湖北省武汉市回复
    1. 寻鹤 博主
      @萧俊介

      技术不到位,后端显示图片我还没研究明白。

      2025-02-25 18:06广西南宁市回复
      1. @寻鹤

        其实就是把js 处理的过程,在 typecho 增加处理函数 进行处理后输出。

        function addImageCaptions($content) { // 使用正则表达式匹配所有包含 data-caption 属性的 figure 标签 preg_match_all('/<figure.*?data-caption="(.*?)".*?>(.*?)<\/figure>/is', $content, $matches); foreach ($matches[0] as $index => $figure) { // 获取 data-caption 属性的值 $caption = $matches[1][$index]; // 只保留中文 $caption = preg_replace('/[^\p{Han}]/u', '', $caption); if (!empty($caption)) { // 构建 figcaption 标签 $figcaption = '<figcaption>' . $caption . '</figcaption>'; // 将 figcaption 标签插入到 figure 标签内部 $newFigure = str_replace('</figure>', $figcaption . '</figure>', $figure); // 替换原始的 figure 标签 $content = str_replace($figure, $newFigure, $content); } } return $content; }
        2025-02-27 08:56福建省三明市回复
        1. 寻鹤 博主
          @玲子

          感谢修改好的代码!我把代码放入php文件,再引用这个函数就解决了,厉害!现在已经删除了js处理,改用php了。

          2025-02-27 15:11广西回复
          1. @寻鹤

            能用就好,其实这个问题如果你搜索一下百度还能看到类似的教程。
            因为js是页面加载完毕后进行处理,会导致延迟和其他情况的发生。如果是php后端处理后输出到页面就不会啦。
            能帮助到你就行,这个百度搜索问AI都能找到解决方案的。

            2025-02-27 20:11福建省三明市回复
            1. 寻鹤 博主
              @玲子

              专业,这个方面知识储备少,还好有你们多指点。像你主题就好简洁,就不那么折腾了。

              2025-02-27 21:34广西回复
  3. 让 ai 写一个

    2025-02-25 09:56安徽省回复
    1. 寻鹤 博主
      @老何

      ai我还使用得不是很流畅,也尝试过,慢慢琢磨了哈哈。

      2025-02-25 11:10广西南宁市回复
  4. 这个应该是引入什么信息吧,我之前看到一个博友有写。

    2025-02-25 03:38河南省漯河市回复
    1. 2025-02-25 03:39河南省漯河市回复
      1. 寻鹤 博主
        @网友小宋

        可以呀,显示EXIF测试,之前作者一直用pigeon的,现在换新,看看他怎么设计了。

        2025-02-25 03:52广西南宁市回复
  5. XIGE

    这玩意我之前好几回想搞,但是整不出来,几次折腾几次放弃了

    2025-02-24 18:14云南省丽江市回复
    1. 寻鹤 博主
      @XIGE

      我折腾了两天,太烧脑了,只能不断的试错。

      2025-02-24 19:49广西南宁市回复