给客户制作的网站,一般都需要考虑得比较全面,其中有一点就是链接网址中的中文处理,中文在网址中通常会显示为乱码,而且附件采用中文名称保存在服务器,在更换主机的过程中,可能会导致文件名称乱码,文件网址失效,这些问题倡萌都是遇到过的。此前倡萌推荐过插件:
WordPress 自动转换中文链接为拼音 SO Pinyin Slugs
SO Pinyin Slugs 还是非常好用的,但是不支持附件文件名转拼音。今天就推荐 Wenprise Pinyin Slug,一个插件就包含了上面两个功能!
Wenprise Pinyin Slug 自动转换 WordPress 中的中文文章别名、分类项目别名、图片文件名称为汉语拼音或英文(采用百度翻译API)。
插件的主要功能
- 转换文章别名为拼音或英文,支持快速编辑时转换
- 转换分类目录、标签或自定义分类法别名为拼音,支持快速编辑时转换
- 当别名为英文,或手动设置了中文别名时,保持原样
- 转换中文图片名为拼音
- 支持自定义转换方式为全拼或第一个字母
- 支持设置拼音之间的间隔字符
- 支持截取转换后的拼音为设置的长度
- 支持古腾堡编辑器
为什么需要这个插件?
当 URL 中出现中文时,中文部分会被自动转码,不知道的人看起来就是一团乱码,缺乏可读性。虽然有些浏览器可以在地址栏中显示中文,复制分享给别人的时候,URL 中文部分显示的也是被转码后的代码。
不同的操作系统环境,FTP 传输工具使用的文件名编码不同,迁移服务器时,如果文件名编码发生了变换,中文文件名很可能会变成乱码,导致文件不能访问。
什么情况下使用这个插件?
如果你的站点是给客户用的,建议使用这个插件,因为他们很可能不会意识到在 URL 和文件名中使用中文的问题。此插件可以自动帮他们处理。
如果站点是你自己用的,并且你是一个细心的人,发布内容时,会手动编辑别名和文件名,这个插件对你来说就是多余的。不需要安装。
插件下载安装
你可以在后台插件安装界面搜索 Wenprise Pinyin Slug 进行安装,或者到官方下载 https://wordpress.org/plugins/wenprise-pinyin-slug/ 后上传安装。
为文件名添加时间戳
为了避免用户上传过多同名文件,导致的性能问题,以及避免某些文件被别人猜测文件名,我们可以考虑为文件名加一个时间戳。
只为转换后的文件名加时间戳
如果你希望只对 Wenprise Pinyin Slug 转换后的文件名添加时间戳,可以使用下面的代码。添加到主题的 functions.php 或其他插件文件即可:
/**
* 替换文件名称为拼音+时间戳
* https://www.wpdaxue.com/wenprise-pinyin-slug.html
* @param $slug
* @param $name
* @param $type
*
* @return string 转换后的拼音+时间戳
*/
add_filter('wenprise_converted_slug', function ( $slug, $name, $type )
{
if( $type == 'file' ) {
$slug = $slug.'-'.time();
}
return $slug;
}, 99, 3);
注:以上方法只有 Wenprise Pinyin Slug 1.5.2 以上版本才生效!
为所有文件名添加时间戳
如果你希望对所有文件名都添加时间戳,同时兼容 Wenprise Pinyin Slug 的转换功能,可以使用下面的代码。添加到主题的 functions.php 或其他插件文件即可:
/**
* 为所有文件名+时间戳
* https://www.wpdaxue.com/wenprise-pinyin-slug.html
* @param $filename
*
* @return mixed
*/
add_filter('sanitize_file_name', function ($filename)
{
$disable_file_convert = wprs_slug_get_option('wprs_pinyin_slug', 'disable_file_convert', 'off');
if ($disable_file_convert === 'on') {
return $filename;
}
// 手动编辑时,不自动转换为拼音
$parts = explode('.', $filename);
// 没有后缀时,直接返回文件名,不用再加 . 和后缀
if (count($parts) <= 1) {
if (preg_match('/[\x{4e00}-\x{9fa5}]+/u', $filename)) {
return wprs_slug_convert($filename, 'file');
}
return $filename;
}
$filename = array_shift($parts);
$extension = array_pop($parts);
foreach ((array)$parts as $part) {
$filename .= '.' . $part;
}
if (preg_match('/[\x{4e00}-\x{9fa5}]+/u', $filename)) {
$filename = wprs_slug_convert($filename, 'file');
}
$filename .= '-'.time();
$filename .= '.' . $extension;
return $filename;
}, 99, 1);
注:以上两种代码根据你的实际需求选择一个即可,不要两个一起用。
那可以转换安装插件之前的吗
应该是不能的,而且之前的网址已被收录,不推荐修改