wordpress提取正文中的第一张图片自动设置为特色图
wordpress 2025-07-26 19
在WordPress中自动提取正文第一张图片并设置为特色图(特色图像),可以通过代码片段或插件实现。以下是两种主流方法:
方法 1:纯代码方式实现(推荐)
将以下代码添加到主题的functions.php文件中(或通过代码片段插件如Code Snippets添加):
// 自动提取正文第一张图片作为特色图
function auto_set_featured_image_from_content() {
global $post;
// 仅对新文章生效(避免覆盖已有特色图)
if ( !empty( $post->ID ) && !has_post_thumbnail( $post->ID ) ) {
$content = $post->post_content;
// 匹配正文中的第一个 <img> 标签
preg_match_all( '/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $content, $matches );
if ( isset( $matches[1][0] ) ) {
$first_image_url = $matches[1][0];
// 检查图片是否已存在于媒体库
$attachment_id = attachment_url_to_postid( $first_image_url );
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' );
$tmp = download_url( $first_image_url );
if ( !is_wp_error( $tmp ) ) {
$file_array = array(
'name' => basename( $first_image_url ),
'tmp_name' => $tmp
);
$attachment_id = media_handle_sideload( $file_array, $post->ID );
if ( !is_wp_error( $attachment_id ) ) {
set_post_thumbnail( $post->ID, $attachment_id );
}
}
}
}
}
}
// 在保存文章时触发
add_action( 'save_post', 'auto_set_featured_image_from_content' );
代码说明:
条件检查:仅当文章没有特色图时才生效。
正则匹配:通过正则提取正文中的第一个<img>标签的 src。
媒体库处理:
如果图片已存在于媒体库,直接关联。
如果图片是外链,先下载到媒体库,再设为特色图。
触发时机:在文章保存时(save_post 钩子)执行。
方法 2:插件实现(简单快捷)
如果不想写代码,可以使用以下插件:
Quick Featured Images
免费插件,支持批量设置第一张图片为特色图。
Auto Featured Image
自动扫描正文中的第一张图片并设为特色图。
这两个插件到wordpress官方的插件库下载就可以
注意事项
图片版权:确保正文中的图片有合法使用权。
性能优化:如果文章量大,建议用代码方案(避免插件臃肿)。
兼容性:代码需测试是否与主题或其他插件冲突(如缓存插件)。
测试步骤
发布一篇 无特色图 且正文中包含图片的文章。
保存后检查是否自动生成了特色图。
如果失败,检查图片是否为外链(需允许下载)或正则匹配是否被主题过滤。
如有其他需求(如提取特定尺寸图片),可进一步调整正则或添加条件。