跳至主要内容

WordPress无插件实现复制图片自动本地化代码

我们一般在发布文章的时候,网站管理图片都是通过后台编辑器上传图片,然后可以使用我们开发的对象存储插件实现图片分离到对象存储中。看到有不少的网友需求,希望复制过来的图片也能自动上传到对象存储或者本地化,不过我们的那些对象存储插件是没有这些功能的。

实际上,我们可以使用一些第三方插件附带实现,比如我们有用过QQWorld远程图片上传插件,或者我们也可以不用插件,直接用代码加入到我们的WordPress程序中也可以实现wordpress远程图片本地化。

//自动本地化图片 Collect By iooqp.cn
add_filter('content_save_pre''auto_save_image');
function auto_save_image($content) {
$upload_path = ";
$upload_url_path = get_bloginfo('url');
//上传目录
if (($var = get_option('upload_path')) !="){
$upload_path = $var;
} else {
$upload_path = 'wp-content/uploads';
}
if(get_option('uploads_use_yearmonth_folders')) {
$upload_path .= '/'.date("Y",time()).'/'.date("m",time());
}
//文件地址
if(($var = get_option('upload_url_path')) != ") {
$upload_url_path = $var;
} else {
$upload_url_path = bloginfo('url');
}
if(get_option('uploads_use_yearmonth_folders')) {
$upload_url_path .= '/'.date("Y",time()).'/'.date("m",time());
}
require_once ("../wp-includes/class-snoopy.php");
$snoopy_Auto_Save_Image = new Snoopy;
$img = array();
//以文章的标题作为图片的标题
if ( !emptyempty( $_REQUEST['post_title'] ) )
$post_title = wp_specialchars( stripslashes( $_REQUEST['post_title'] ));
$text = stripslashes($content);
if (get_magic_quotes_gpc()) $text = stripslashes($text);
preg_match_all("/ src=(\"|\'){0,}(http:\/\/(.+?))(\"|\'|\s)/is",$text,$img);
$img = array_unique(dhtmlspecialchars($img[2]));
foreach ($img as $key => $value){
set_time_limit(180); //每个图片最长允许下载时间,秒
if(str_replace(get_bloginfo('url'),"",$value)==$value&&str_replace(get_bloginfo('home'),"",$value)==$value){
//判断是否是本地图片,如果不是,则保存到服务器
$fileext = substr(strrchr($value,'.'),1);
$fileext = strtolower($fileext);
if($fileext==""||strlen($fileext)>4)
$fileext = "jpg";
$savefiletype = array('jpg','gif','png','bmp');
if (in_array($fileext, $savefiletype)){
if($snoopy_Auto_Save_Image->fetch($value)){
$get_file = $snoopy_Auto_Save_Image->results;
}else{
echo "error fetching file: ".$snoopy_Auto_Save_Image->error."<br>";
echo "error url: ".$value;
die();
}
$filetime = time();
$filepath = "/".$upload_path;//图片保存的路径目录
!is_dir("..".$filepath) ? mkdirs("..".$filepath) : null;
//$filename = date("His",$filetime).random(3);
$filename = substr($value,strrpos($value,'/'),strrpos($value,'.')strrpos($value,'/'));
//$e = '../'.$filepath.$filename.'.'.$fileext;
//if(!is_file($e)) {
// copy(htmlspecialchars_decode($value),$e);
//}
$fp = @fopen("..".$filepath.$filename.".".$fileext,"w");
@fwrite($fp,$get_file);
fclose($fp);
$wp_filetype = wp_check_filetype( $filename.".".$fileext, false );
$type = $wp_filetype['type'];
$post_id = (int)$_POST['temp_ID2'];
$title = $post_title;
$url = $upload_url_path.$filename.".".$fileext;
$file = $_SERVER['DOCUMENT_ROOT'].$filepath.$filename.".".$fileext;
//添加数据库记录
$attachment = array(
'post_type' => 'attachment',
'post_mime_type' => $type,
'guid' => $url,
'post_parent' => $post_id,
'post_title' => $title,
'post_content' => ",
);
$id = wp_insert_attachment($attachment, $file, $post_parent);
$text = str_replace($value,$url,$text); //替换文章里面的图片地址
}
}
}
$content = AddSlashes($text);
remove_filter('content_save_pre''auto_save_image');
return $content;
}
function mkdirs($dir)
{
if(!is_dir($dir))
{
mkdirs(dirname($dir));
mkdir($dir);
}
return ;
}
function dhtmlspecialchars($string) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = dhtmlspecialchars($val);
}
}else{
$string = str_replace('&''&', $string);
$string = str_replace('"''"', $string);
$string = str_replace('<''<', $string);
$string = str_replace('>''>', $string);
$string = preg_replace('/&(#\d;)/''&\1', $string);
}
return $string;
}

我们把代码放到当前主题Functions.php文件中保持即可。自己测试下是否和你的主题兼容。


--
Sunny dude who is like tender bud

评论

此博客中的热门博文

七星连珠的玄学秘密

图片 一生仅有一次的震撼天象,即将在2025年2月28日上演!就在今天晚上,太阳系的七大行星将在夜空中串成一条璀璨夺目的珠链,呈现出罕见的"七星连珠"奇观。而且这次可不一般,火星与木星还会在连珠时形成美轮美奂的双星拱月景象,整整持续四小时十七分,精准度更是达到了三百年以来的最高值。只要天气晴朗,我国全境都能大饱眼福! “七星连珠”或许只能看见三颗 据上海天文台介绍,参与此次连珠的行星自西向东分别为土星、水星、海王星、金星、天王星、木星和火星,它们将出现在黄昏日落后不久。从最西端的土星到最东端的火星,张角为117°,横跨大半个天空。 然而,由于金星更靠北一些,因此这个连珠串看着不是很完美。更重要的是,其中天王星和海王星因为亮度太低了,肉眼不可见。即便完全天黑,天王星的亮度也仅仅在理论上的目力极限边缘。 而土星距离太阳只有12°,基本淹没在黄昏的天光中,直到它落下,天都没完全黑下来(完全天黑是指太阳在地平线以下18°)。 水星也好不到哪里去,它距离太阳14°,仅仅比土星晚10分钟落下,虽说比土星亮2个星等,但想凭肉眼直接找到,难度相当大。当然,不是说完全不可能,但必须满足西方地平线极为开阔、天气特别晴朗、大气透明度极佳等条件,通过拍照或可一试。 一般情况下,你能同时看见的,只有金星、木星、火星这3颗行星。 另外,不仅限于2月28日这一天,在2月20日至3月1日期间都可以。 图片 什么是“行星连珠”? 据说有科学家计算了公元前3001年到公元3000年这6000年间的情况。 当张角在5°以下时,“六星连珠”发生49次,“七星连珠”发生3次,无“八星连珠”或“九星连珠”。如果张角扩大到10°,“六星连珠”有709次,“七星连珠”有52次,“八星连珠”有3次。想要发生“九星连珠”(冥王星曾为第九大行星),必须把张角扩大到15°,这样的话6000年间只有1次这样的“罕见天象”——将发生在2149年12月10日。 《七星连珠~意为变化之象》 罕见的天文奇观——神秘的天象即将到来。 …… 2025年2月28日晚9点左右天空会出现罕见的天文奇观——七星连珠的景象。 …… 太阳系七大行星将在夜空中形成璀璨的珠链,这是巧合还是神秘的预言? …… 在中国古代,天象的变化被认为是和人间兴衰、朝代更迭有着密切关系。七星连珠现象往往被赋予神秘色彩,被认为是某种“天意”的显现。...

信用卡使用成本更低的渠道

  很多朋友持有信用卡,如果从永续债的角度来看,那就可玩性非常大。但是输出渠道就决定了你的成本。办理渠道第一优先级是银行的M。当然需要一定的大表哥沟通与时间成本。那先用我今年找到的立刻能用的渠道吧。 (请注意,对照以下使用步骤时,您随时可以点击公众号页面右上角三个点,选择“浮窗”然后继续手机操作) 识别上方海报,注册完,下载拉生意APP,用进件手机号登陆,首次登陆需要刷脸。 首页-商户管理-新增商户。门头和店内照片、银行台均可任意上传。 提交完资料会自动审核,并不是人工干预。进入支付宝-顶端搜索“商家认证”,完成; 微信认证要稍微留意下,别用扫码,会显示已达上限。在代理端-商户管理-商户查询,找到要认证的商户,点开子商户,(也可以在拉卡拉APP-首页-支付认证-微信认证),复制出商户号,在微信商家认证里搜索。 认证路径:微信顶端搜索:商家注册。 下载“拉卡拉”APP,登录,做好实名认证;左上角三条杠,可以切换商户; 有任何问题,比如注册、改费率,识别下方二维码联系我吧。