测试代码功能

测试代码功能:自动获取文章内首张图片并设置为文章的特色图片,如果这个图片是外链图片则自动下载回本地。

// 在文章保存之前的钩子函数中添加自动抓取特色图片的功能
function auto_set_featured_image($post_id) {
    // 检查是否为新文章
    if (!wp_is_post_revision($post_id)) {
        // 获取文章内容
        $post_content = get_post_field('post_content', $post_id);
        
        // 使用正则表达式匹配第一个图片标签
        preg_match('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post_content, $matches);
        
        // 检查是否匹配到图片标签
        if ($matches && isset($matches[1])) {
            $image_url = $matches[1];
            
            // 检查图片是否为本地图片
            if (strpos($image_url, site_url()) === 0) {
                $image_path = str_replace(site_url(), ABSPATH, $image_url);
                
                // 获取本地图片的附件ID
                $attachment_id = attachment_url_to_postid($image_path);
                
                // 设置附件ID为特色图片
                if ($attachment_id) {
                    set_post_thumbnail($post_id, $attachment_id);
                }
            } else {
                // 如果图片是外链图片,则下载并保存为本地附件
                $upload_dir = wp_upload_dir();
                $image_name = basename($image_url);
                $image_path = $upload_dir['path'] . '/' . $image_name;
                
                // 下载图片
                $image_data = file_get_contents($image_url);
                
                // 保存图片为本地附件
                if ($image_data !== false) {
                    file_put_contents($image_path, $image_data);
                    
                    // 添加图片到媒体库
                    $attachment = array(
                        'guid'           => $upload_dir['url'] . '/' . $image_name,
                        'post_mime_type' => 'image/jpeg', // 根据实际情况修改图片类型
                        'post_title'     => $image_name,
                        'post_content'   => '',
                        'post_status'    => 'inherit'
                    );
                    
                    $attachment_id = wp_insert_attachment($attachment, $image_path, $post_id);
                    
                    // 设置附件ID为特色图片
                    if (!is_wp_error($attachment_id)) {
                        set_post_thumbnail($post_id, $attachment_id);
                    }
                }
            }
        }
    }
}
add_action('save_post', 'auto_set_featured_image');

0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论