yiichou / aliyun-oss-support

基于阿里云OSS的WordPress远程附件支持插件
Other
353 stars 80 forks source link

旧文章插入的缩略图在编辑器界面和前台不被改变 #106

Closed inoodle-Git closed 4 years ago

inoodle-Git commented 5 years ago

image

如图,当插件阿里云图片服务开关打开时,旧文章撰写时插入的缩略图无法添加阿里云图片服务后缀,在现在编辑器和前台显示的链接还是wp链接。

我曾尝试使用wp_calculate_image_srcset让系统根据imageMeta直接计算srcset,上述旧文章缩略图在前台显示就正常了,但是媒体库和编辑器中图片却显示不出来了。我修改的版本(sign函数是我创建的cdn鉴权函数):

/**
 * 获取imgmeta 
 * */
public function getImageMeta($data)
{
    self::$imageMeta = $data;
    return $data;
}
/**
 * 将图片 Srcsets Url 替换为 OSS Url
 *
 * @param $sources
 * @return mixed
 */
public function replaceImgSrcsetUrl($sources)
{
    $imageMeta = self::$imageMeta;
    $height=$imageMeta['height']<4096 ? $imageMeta['height']: 4096;
    $width=$imageMeta['width']<4096 ? $imageMeta['width']: 4096;
    $basename = \PHPMailer::mb_pathinfo($imageMeta['file'], PATHINFO_BASENAME);
    /**1.直接用ossBaseUrl构建srcset数据,不再使用原wpsrcset
     * 2.当图片服务打开时对url进行处理*/
    if (!$this->is_excluded($imageMeta['file'])) {
        if(Config::$enableImgService){
            foreach($imageMeta['sizes'] as $size => $info ){
                if (Config::$enableImgStyle){
                    $url=$this->ossBaseUrl.'/'.$this->aliImageStyle($imageMeta['file'], $size);
                }else{
                    $url=$this->ossBaseUrl.'/'.$this->aliImageResize($imageMeta['file'],$width);
                }
                $url = $this->sign_url($url,139);
                $sources[$imageMeta['sizes'][$size]['width']] = array(
                    'url'=>$url,
                    'descriptor'=>'w',
                    'value'=>$imageMeta['sizes'][$size]['width'],
                    'size'=>$size,
                );
            }
            /** 当原图保护打开时,添加一个带full关键字的url到srcset中*/
            if (Config::$sourceImgProtect){
                $url=$this->ossBaseUrl.'/'.$this->aliImageStyle($imageMeta['file'], 'full');
                $url = $this->sign_url($url,149);
                $sources[$imageMeta['width']]=array(
                    'url'=>$url,
                    'descriptor'=>'w',
                    'value'=>$imageMeta['width'],
                    'size'=>'full',
                );
            }
        }else{
            foreach ($sources as $k => $source) {
                    $url=str_replace($this->wpBaseUrl, $this->ossBaseUrl, $source['url']);
                    $url = $this->sign_url($url,161);
                    $sources[$k]['url'] =$url ;
            } 
        }
    }    
    return $sources;
}

@IvanChou

inoodle-Git commented 5 years ago

我今天做了更进一步尝试,在5.0以下的版本中可以使用下面这个钩子修改编辑器载入内容后的图片链接:

function filter_function_name( $content, $post_id ) {
  // Process content here
  return $content;
}
add_filter( 'content_edit_pre', 'filter_function_name', 10, 2 );

但是,在5.0版本以上时系统默认的古腾堡编辑器并不支持这个钩子(title_edit_pre也同样不支持),所以问题更待进一步解决

yiichou commented 4 years ago

我邀请您成为插件合作者了,您接受一下 😉

inoodle-Git commented 4 years ago

收到,已接受

------------------ 原始邮件 ------------------ 发件人: "Ivan Chou"notifications@github.com; 发送时间: 2019年10月8日(星期二) 中午1:12 收件人: "IvanChou/aliyun-oss-support"aliyun-oss-support@noreply.github.com; 抄送: "廖维伟"leo@hrwei.com;"Author"author@noreply.github.com; 主题: Re: [IvanChou/aliyun-oss-support] 旧文章插入的缩略图在编辑器界面和前台不被改变 (#106)

我邀请您成为插件合作者了,您接受一下 😉

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

inoodle-Git commented 4 years ago

已解决,该问题是由于古藤堡编辑器使用WordPress RESTapi加载文章,如果加载文章时需要对文章内容进行修改,正确的钩子应该是rest_prepare_post