wordpress提取正文中的第一张图片自动设置为特色图

101次阅读
没有评论

共计 3070 个字符,预计需要花费 8 分钟才能阅读完成。

wordpress 提取正文中的第一张图片自动设置为特色图

WordPress 中自动提取正文第一张图片并设置为特色图(特色图像),可以通过代码片段或插件实现。以下是两种主流方法:

方法 1:纯代码方式实现(推荐)

将以下代码添加到主题的 functions.php 文件中(或通过代码片段插件如 Code Snippets 添加):

简化版

// 自动将文章第一张图片设为特色图片
function auto_set_featured_image() {
global $post;

// 仅在文章类型为 post 且未设置特色图片时执行
if (‘post’ == get_post_type( $post) && !has_post_thumbnail($post->ID) ) {
// 从文章内容中提取图片
$first_image = ”;
ob_start();
ob_end_clean();

// 使用正则表达式查找文章中的第一张图片
preg_match_all(‘/<img.+src=[\'”]([^\'”]+)[\'”].*>/i’, $post->post_content, $matches );

if (!empty( $matches[1] ) ) {
$first_image = $matches[1][0];

// 尝试获取图片的附件 ID
$attachment_id = attachment_url_to_postid($first_image);

// 如果找到了附件 ID,设置为特色图片
if ($attachment_id) {
set_post_thumbnail($post->ID, $attachment_id);
} else {
// 如果图片不是媒体库中的附件,尝试导入
require_once(ABSPATH . ‘wp-admin/includes/media.php’);
require_once(ABSPATH . ‘wp-admin/includes/file.php’);
require_once(ABSPATH . ‘wp-admin/includes/image.php’);

// 下载图片并添加到媒体库
$attachment_id = media_sideload_image($first_image, $post->ID, $post->post_title, ‘id’);

// 如果导入成功,设置为特色图片
if (!is_wp_error( $attachment_id) ) {
set_post_thumbnail($post->ID, $attachment_id);
}
}
}
}
}
// 在文章保存时执行
add_action(‘save_post’, ‘auto_set_featured_image’);

// 确保在文章发布时也执行
add_action(‘publish_post’, ‘auto_set_featured_image’);

 

优化版:

// 自动将文章第一张图片设为特色图片(优化版)
function auto_set_featured_image($post_id) {
// 防止保存修订版本时执行
if (wp_is_post_revision( $post_id) ) {
return;
}

// 获取文章对象
$post = get_post($post_id);

// 仅在文章类型为 post 时执行
if (‘post’ != get_post_type( $post) ) {
return;
}

// 如果已经设置了特色图片,则跳过处理
if (has_post_thumbnail( $post_id) ) {
// 可以在这里添加日志,记录已跳过处理的文章
// error_log(“ 已跳过处理已设置特色图片的文章: {$post_id}” );
return;
}

// 从文章内容中提取图片
$first_image = ”;

// 使用正则表达式查找文章中的第一张图片
preg_match_all(‘/<img.+src=[\'”]([^\'”]+)[\'”].*>/i’, $post->post_content, $matches );

if (!empty( $matches[1] ) ) {
$first_image = $matches[1][0];

// 尝试获取图片的附件 ID
$attachment_id = attachment_url_to_postid($first_image);

// 如果找到了附件 ID,设置为特色图片
if ($attachment_id) {
// 关闭钩子防止无限循环
remove_action(‘save_post’, ‘auto_set_featured_image’);
set_post_thumbnail($post_id, $attachment_id);
add_action(‘save_post’, ‘auto_set_featured_image’);
} else {
// 如果图片不是媒体库中的附件,尝试导入
require_once(ABSPATH . ‘wp-admin/includes/media.php’);
require_once(ABSPATH . ‘wp-admin/includes/file.php’);
require_once(ABSPATH . ‘wp-admin/includes/image.php’);

// 下载图片并添加到媒体库
$attachment_id = media_sideload_image($first_image, $post_id, $post->post_title, ‘id’);

// 如果导入成功,设置为特色图片
if (!is_wp_error( $attachment_id) ) {
// 关闭钩子防止无限循环
remove_action(‘save_post’, ‘auto_set_featured_image’);
set_post_thumbnail($post_id, $attachment_id);
add_action(‘save_post’, ‘auto_set_featured_image’);
} else {
// 记录错误日志
error_log(“ 导入图片失败 (文章 ID: {$post_id}): ” . $attachment_id->get_error_message());
}
}
}
}

// 在文章保存时执行,优先级设为较高的值 (20) 确保在其他保存操作之后执行
add_action(‘save_post’, ‘auto_set_featured_image’, 20, 1);

代码说明:

条件检查:仅当文章没有特色图时才生效。

正则匹配:通过正则提取正文中的第一个 <img> 标签的 src。

媒体库处理:

如果图片已存在于媒体库,直接关联。

如果图片是外链,先下载到媒体库,再设为特色图。

触发时机:在文章保存时 (save_post 钩子) 执行。

方法 2:插件实现(简单快捷)

如果不想写代码,可以使用以下插件:

Quick Featured Images

免费插件,支持批量设置第一张图片为特色图。

Auto Featured Image

自动扫描正文中的第一张图片并设为特色图。

这两个插件到 wordpress 官方的插件库下载就可以

注意事项

图片版权:确保正文中的图片有合法使用权。

性能优化:如果文章量大,建议用代码方案(避免插件臃肿)。

兼容性:代码需测试是否与主题或其他插件冲突(如缓存插件)。

测试步骤

发布一篇 无特色图 且正文中包含图片的文章。

保存后检查是否自动生成了特色图。

如果失败,检查图片是否为外链 (需允许下载) 或正则匹配是否被主题过滤。

如有其他需求(如提取特定尺寸图片),可进一步调整正则或添加条件。

正文完
 0
蓝猫の鱼
版权声明:本站原创文章,由 蓝猫の鱼 于2025-08-06发表,共计3070字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码