WordPress添加文章内图片自动存储到服务器功能-2
本文最后更新于 435 天前,文中的信息可能已经有所变化。如有误,请留言反馈。

发布文章时经常会复制别处的文章,文章里通常也带有图片,那么如何把图片粘贴过来的时候自动本地化上传到媒体库呢?

以前发布过类似文章《WordPress添加文章内图片自动存储到服务器功能 》可以参考。

目前还有另一种添加代码:

以下代码添加到主题的 functions.php 文件里即可,或者可以直接安装插件 Easy copy paste。

/**
* 钩子函数:将post_content中本站服务器域名外的img上传至服务器并替换url
*
* @param Int $post_id
* @param Object $post
*
*/
function ecp_save_post($post_id, $post) {
// WordPress 全局变量 wpdb类
global $wpdb;
// 只有在点击发布/更新时才执行以下动作
if($post->post_status == ‘publish’) {
// 匹配<img>、src,存入$matches数组,
$p = ‘/<img.*[\s]src=[\”|\’](.*)[\”|\’].*>/iU’;
$num = preg_match_all($p, $post->post_content, $matches);

if ($num) {
// 本地上传路径信息(数组),用来构造url
$wp_upload_dir = wp_upload_dir();

// 脚本执行不限制时间
set_time_limit(0);

// 构造curl,配置参数
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// 抓取时如果发生301,302跳转,则进行跳转抓取
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// 最多跳转20次
curl_setopt($ch, CURLOPT_MAXREDIRS,20);
// 发起连接前最长等待时间
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);

$ecp_options = $_SERVER[‘HTTP_HOST’];

foreach ($matches[1] as $src) {
if (isset($src) && strpos($src, $ecp_options) === false) {
// 如果图片域名不是本站域名

// 检查src中的url有无扩展名,没有则重新给定文件名
// 注意:如果url中有扩展名但格式为webp,那么返回的file_info数组为 [‘ext’ =>”,’type’ =>”]
$file_info = wp_check_filetype(basename($src), null);
if ($file_info[‘ext’] == false) {
// 无扩展名和webp格式的图片会被作为无扩展名文件处理
date_default_timezone_set(‘PRC’);
$file_name = date(‘YmdHis-‘).dechex(mt_rand(100000, 999999)).’.tmp’;
} else {
// 有扩展名的图片重新给定文件名防止与本地文件名冲突
$file_name = dechex(mt_rand(100000, 999999)) . ‘-‘ . basename($src);
}

// 抓取图片, 将图片写入本地文件
curl_setopt($ch, CURLOPT_URL, $src);
$file_path = $wp_upload_dir[‘path’] . ‘/’ . $file_name;
$img = fopen($file_path, ‘wb’);
// curl写入$img
curl_setopt($ch, CURLOPT_FILE, $img);
$img_data = curl_exec($ch);
fclose($img);

if (file_exists($file_path) && filesize($file_path) > 0) {
// 将扩展名为tmp和webp的图片转换为jpeg文件并重命名
$t = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
$arr = explode(‘/’, $t);
// 对url地址中没有扩展名或扩展名为webp的图片进行处理
if (pathinfo($file_path, PATHINFO_EXTENSION) == ‘tmp’) {
$file_path = ecp_handle_ext($file_path, $arr[1], $wp_upload_dir[‘path’], $file_name, ‘tmp’);
} elseif (pathinfo($file_path, PATHI

评论

  1. 1 年前
    2023-5-26 20:18:25

    这个很实用

  2. 1 年前
    2023-5-28 19:23:09

    你这复制的也太彻底了吧,我一般是将图片也一并下载过来。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇