2,902   PHP WordPress

前几天修改wordpress的根目录后,发现文章的图片全部无法显示,查看图片链接代码才发现,图片地址都是绝对地址:’src=http://www.opsesa.me/wordpress/wp-content/……’ ;这样的后果是,修改根目录或者移植程序到其他服务器的话,图片都将无法正常显示。

上网搜了一下,发现wordpress果真采取绝对地址的方式来保存图片,好处是,其他人复制你的文章到他的博客时,图片也能正常显示;换句话说,他打开博客时,从你的服务器上读取所需图片,所以需要绝对地址才能读取到。

确实有上述的好处,但是对于部分人来说,比如我,习惯在本地服务器上调试程序,调试成功后再放上服务器,那样的话,图片就全部无法正常显示了;另外,说不定以后会移植到其他服务器,那更麻烦了。当然,可以通过修改数据库内容来解决这个问题,可是我觉得这个更麻烦。

其实将绝对路径改为相对路径就可以避免上面的问题啦。再次上网一搜,果真有方法,可是感觉有点悬,一来说得不够具体,二来自己看得不明白,还是踏踏实实自己想办法吧。

因为之前在开发classcenter时就遇到过类似的问题,使用kingeditor作为编辑器时,它保存的也是绝对路径,我采取的方法是,在存入数据前,把绝对路径替换成相对路径。

绝对路径:$content = ‘ src =  “http://localhost/classcenter/uploads/……” ‘;

替换代码:$bath_url = get_setting(‘base_url’);//获取根目录即http://localhost/classcenter

$content =  str_replace($bath_url, ‘.’, $content);

这样的话,$content 就变为 ‘ src = “./uploads/…..” ‘;呵呵,瞬间变为相对路径,移到哪里都可以啦。

想着wordpress也可以采取这样的方法,于是在保存文章前替换图片的绝对路径。管理员 admin 保存文章的执行文件是 wp-admin/post.php,我在文章处理前将 $_POST过来的内容进行了替换,其中包括图片内容,代码如下:

//Relative path for images
if($_POST[‘content’])
{
$_POST[‘content’] = str_replace(get_option(‘siteurl’), ‘.’, $_POST[‘content’]);
}

get_option(‘siteurl’) 获取的是根目录,呵呵,瞬间又变为了相对地址,查看文章的图片,果真是相对地址,而且正常显示。我原以为这样就万事大吉了,殊不知好戏还在后面了。

文章开头已经说过,wordpress采取的是绝对路径的方式来存取图片,在新建或编辑文章时也是采取绝对路径来获取图片,这时候问题就来了。

src = “./uploads/…..” 是从当前目录下寻找uploads 文件夹下的图片,在站点查看文章图片时,当前目录是根目录即 luckybird,而 uploads 就在其目录下,所以能正常显示;但在新建或编辑文章时,当前目录是 wp-admin,uploads 根本不在这个目录下,所以无法正常显示图片。真是好事多磨啊,还得想想办法。

为了在新建或编辑正常显示图片,我又采取了绝对路径,但是保存文章内容,我依然采用相对路径。方法是,把相对路径替换为绝对路径,再显示在编辑界面上,依然在 wp-admin/post.php 文件,代码;

//Relative path for image
$post->post_content = str_replace(‘src=”./’, ‘src=”‘.get_option(‘siteurl’).’/’, $post->post_content);

呵呵,瞬间又变回绝对路径,编辑状态下,图片正常显示。

在保存文章时,图片绝对路径会再次被替换为相对路径,所以不用担心无法正常显示了。曲径通幽,暂时想到这样的方法来解决图片路径的问题。

在插入图片时,发现了个小问题,图片名字包含 % 号时,无法正常上传,有图为证,这是含有 % 号的

have

不含有 % 号的

no

 

 

 




Leave a Reply

Your email address will not be published. Required fields are marked *