如果您正在创建一个WordPress的中文网站将会发现文章的URL地址的后半段Slug总是显示中文,这既不美观也不利于搜索引擎优化,由于WordPress是国外的工具对中文的拼音的支持并不十分友好,那么如何让网站的URL不出现中文而只显示英文?
有两个方法:
- 第一个方法是修改PHP代码
- 第二个方法是使用插件
方法1:修改PHP代码
为了自动将 WordPress 帖子的固定链接(permalink)从中文转换为英文,可以使用 PHP 代码来钩入 WordPress 的发布流程,并将中文标题自动翻译成英文或将其转换为拼音。
以下是一个示例,展示如何使用 slug
过滤器把中文标题转换为英文的拼音形式。你可以将此代码添加到你主题的 functions.php
文件中,或者创建一个自定义插件。
步骤:
- 安装 PHP 的拼音转换库:可以使用 PHP 的开源拼音转换库,例如
overtrue/pinyin
。该库可以通过 Composer 安装。如果你没有使用 Composer,可以通过其他途径引入拼音转换类。 - 在 WordPress 中使用拼音转换:在
functions.php
中编写代码,使用拼音库自动将中文标题转换为拼音。
示例代码:
// 首先确保引入拼音转换库(需要安装 overtrue/pinyin)
require_once 'path_to_your_composer_autoload_file/vendor/autoload.php';
use Overtrue\Pinyin\Pinyin;
// 自动将中文标题转换成拼音作为 slug
function auto_convert_slug_to_pinyin($slug, $post_ID, $post_status, $post_type) {
// 获取当前的文章标题
$post_title = get_the_title($post_ID);
// 如果 slug 为空或是中文标题
if (empty($slug) || preg_match('/[\x{4e00}-\x{9fa5}]/u', $post_title)) {
// 创建 Pinyin 类的实例
$pinyin = new Pinyin();
// 将标题转换为拼音,使用连字符连接
$slug = $pinyin->permalink($post_title, '-');
// 更新文章的 slug
wp_update_post(array(
'ID' => $post_ID,
'post_name' => $slug
));
}
return $slug;
}
// 钩入 WordPress 的保存文章流程,自动生成拼音 slug
add_filter('wp_insert_post_data', 'auto_convert_slug_to_pinyin', 10, 3);
解释:
auto_convert_slug_to_pinyin
函数会在保存或发布文章时被调用。- 通过
get_the_title($post_ID)
获取文章标题,然后检查是否含有中文字符。 - 如果发现标题是中文,使用
Pinyin
库将其转换为拼音,并用连字符连接各个拼音词。 - 最后,通过
wp_update_post()
更新文章的post_name
字段,即固定链接部分。
安装拼音库的方式:
如果你没有安装 overtrue/pinyin
库,你可以通过 Composer 安装:
composer require overtrue/pinyin
或者使用其他拼音转换方法。
注意事项:
- 备份你的
functions.php
文件:在修改前,确保备份你的 WordPress 文件,以防出现问题。 - 检查兼容性:确保安装的 WordPress 版本和 PHP 版本与代码兼容。
- 性能优化:对于大量的文章,频繁调用外部库可能会影响性能。如果有大量文章需要转换,建议批量处理。
通过这种方式,WordPress 的固定链接就可以根据中文标题自动生成对应的拼音英文 slug 了。
方法2:使用Pinyin Slugs插件
如果你在寻找一款这样的插件会发现很多插件已经不再可以使用,但Pinyin Slugs是少数可以使用的插件。您可以在插件库搜索它并安装。
第一步,去WordPress插件库中搜索Pinyin Slugs,有多个结果但推荐第一个。
第二步,设置Pinyin Slugs。
来到设置中的Pinyin Slugs的设置界面。在这里可以设置转换英文的字数上限,可以按需设置。
注意:
- Pinyin Slugs并不能自动识别原来帖子的中文Slug,需要手动更新一遍。
- Pinyin Slugs有时自动翻译出来的英文会不完整。
不过Pinyin Slugs可以解决中文变英文Slug的大部分问题,在没有更好的插件之前值得使用。