如果你的站点文章数量很多,那么每一篇文章都要手动设置缩略图必然会是个繁杂的步骤。之前我们分享过一篇《WordPress文章随机显示缩略图的实现方法》。
今天我们再来看看如何自动获取文章内第一张图片作为缩略图。
这将大大减少我们的工作量,的确是一个很好的小功能,喜欢的朋友可以自己试试。
// 自动获取文章内第一张图片作为缩略图
function catch_first_image() {
global $post, $posts;
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src=['"]([^'"]+)['"].*>/i', $post->post_content, $matches);
$first_img = $matches[1][0];
if (empty($first_img)) { // 定义一张默认图片
$first_img = '/wp-content/themes/um/img/default.png';
}
return $first_img;
}
使用方法
1、将上面代码添加到自己主题的 functions.php 文件。
<?php echo catch_first_image(); ?>
2、将上面代码添加到需要获取缩略图的文章循环中即可。
代码说明与优化建议
上述代码的核心是使用正则表达式从文章内容中匹配第一张图片的 URL。但请注意,原始代码存在一些潜在问题:
- 正则表达式可能不完整:它可能无法匹配所有格式的
<img>标签(例如包含换行或不同属性顺序的标签)。 - 缺少错误处理:如果文章中没有图片,
$matches[1][0]可能会引发未定义索引的警告。 - 默认图片路径:路径
/wp-content/themes/um/img/default.png是硬编码的,需要根据你的实际主题路径进行修改。
改进版代码示例
以下是一个更健壮的版本,它使用 WordPress 内置函数 get_the_content() 并添加了更安全的检查:
// 自动获取文章内第一张图片作为缩略图(改进版)
function catch_first_image_improved($post_id = null) {
if (empty($post_id)) {
global $post;
$post_id = $post->ID;
}
$post_content = get_post_field('post_content', $post_id);
$first_img = '';
// 使用更健壮的正则表达式匹配图片
if (preg_match('/<img[^>]+src=['"]([^'"]+)['"]/i', $post_content, $matches)) {
$first_img = $matches[1];
}
// 如果未找到图片,返回默认图片或空字符串
if (empty($first_img)) {
// 请将下面的路径替换为你自己的默认图片路径
$first_img = get_template_directory_uri() . '/img/default.png';
// 或者返回空,由调用者处理:$first_img = '';
}
return $first_img;
}
使用改进版函数:
<?php
$thumbnail_url = catch_first_image_improved();
if (!empty($thumbnail_url)) {
echo '<img src="' . esc_url($thumbnail_url) . '" alt="缩略图">';
} else {
// 显示占位图或其他内容
}
?>
这样修改后,代码更安全、更灵活,也更容易维护。