在使用哆麦CMS制作博客、企业站或资讯网站时,经常需要在文章列表、相关文章、热门文章等模块中显示缩略图。
如果后台没有单独设置缩略图,那么最方便的方法就是自动提取文章正文中的第一张图片作为缩略图显示。当文章没有图片时,再调用默认图片进行替代。
本文记录一下哆麦CMS中自动提取文章图片作为缩略图的实现方法。
为什么要自动提取文章图片?
传统方式需要编辑每篇文章时单独上传缩略图,不仅增加工作量,而且容易遗漏。
通过自动提取正文第一张图片,可以实现:
减少文章发布步骤
自动生成文章列表缩略图
保持网站视觉统一
提高内容管理效率
对于博客站、资讯站和SEO站点来说,这种方案非常实用。
一、文章列表循环自动获取缩略图
在文章循环中,可以使用 get_images() 函数获取文章中的所有图片。
示例代码
<?php
$posts = get_posts(array('category__in'=>array(1), 'number'=>6));
foreach($posts as $post){
// 获取文章图片
$images = get_images($post->ID);
// 如果没有图片则使用默认图
$img_src = !empty($images) && !empty($images[0]) ? $images[0] : '/dm-content/themes/blog/image/thumbnail.jpg';
?>
<li data-href="<?php echo $post->get_permalink();?>">
<p class="figure"><img src="<?php echo $img_src;?>!115x86" width="115" height="86" alt="<?php echo $post->post_subtitle;?>" loading="lazy"/></p>
<div class="content">
<p><?php echo $post->post_subtitle;?></p>
<span class="date"><?php echo date('j M, Y', strtotime($post->post_date)); ?></span>
<p class="intro text-row-2"><?php echo dm_substr($post->post_excerpt, 0, 360); ?></p>
</div>
</li>
<?php } ?>核心代码解析
获取文章图片:
$images = get_images($post->ID);
返回结果通常为数组:
Array( [0] => 图片1地址 [1] => 图片2地址 )
获取第一张图片:
$images[0]
设置默认图片:
$img_src = !empty($images) && !empty($images[0]) ? $images[0] : '/dm-content/themes/blog/image/thumbnail.jpg';
这样即使文章中没有图片,也不会出现图片加载失败的问题。
二、相关文章自动提取缩略图
很多主题会在文章底部显示相关文章。
相关文章同样可以调用正文第一张图片作为缩略图。
示例代码
<?php
$posts = get_related_posts(5, array(1));
if(empty($posts))
$posts = get_posts(array('category__in'=>array(1), 'number'=>5));
foreach($posts as $post){
// 获取文章图片
$images = get_images($post->ID);
// 默认图处理
$img_src = !empty($images) && !empty($images[0]) ? $images[0] : '/dm-content/themes/longine/images/thumbnail.jpg';
?>
<li class="item" data-href="<?php echo $post->get_permalink();?>">
<div class="figure"><img src="<?php echo $img_src;?>!305x229" width="305" height="229" alt="<?php echo $post->post_subtitle;?>" loading="lazy"/></div>
<div class="content">
<p class="date"><?php echo date('j M, Y', strtotime($post->post_date)); ?></p>
<p class="title text-row-2"><?php echo $post->post_subtitle;?></p>
</div>
</li>
<?php } ?>三、为什么必须使用 $post->ID
很多开发者会直接写:
$images = get_images();
这样在单篇文章页面中通常没有问题。
但是在:
文章列表
最新文章
热门文章
相关文章
自定义循环
等场景中,很容易出现所有文章都调用同一张图片的问题。
正确写法应为:
$images = get_images($post->ID);
明确指定当前循环文章ID。
这样每篇文章都会获取自己的第一张图片。
四、推荐封装写法
如果网站多个位置都需要调用缩略图,可以统一写法:
$images = get_images($post->ID); $img_src = !empty($images) && !empty($images[0]) ? $images[0] : '/dm-content/themes/longine/images/thumbnail.jpg';
后续只需要输出:
<img src="<?php echo $img_src;?>">
代码更简洁,也方便后期统一修改默认缩略图。
总结
在哆麦CMS中,实现自动缩略图最关键的函数是:
get_images($post->ID)
推荐的实现逻辑如下:
获取当前文章所有图片;
读取第一张图片作为缩略图;
判断图片是否存在;
不存在时调用默认图片;
在所有文章循环中使用
$post->ID。
这样即可轻松实现文章列表、相关文章、热门文章等模块的自动缩略图显示,无需手动上传缩略图,大幅提升内容维护效率。



你觉得文章内容怎么样
4 人参与,0 条评论