WordPress 实现自动中文排版纠正,中英文之间添加空格补正
我这里使用的是 jxlwqq 的 chinese-typesetting 项目,Github页:https://github.com/jxlwqq/chinese-typesetting
可以给文章中的英文单词左右添加空格,以及对专有名词替换正确的大小写、清除空标签等。具体可以看项目的说明。
其他类似的项目也有,用法都类似,只是这个项目支持的比较广泛所以我用这个。具体怎样的排版格式是正确的,网上的“学究”们争议也很多,但是不重要,咱们的目的是提升网页的美观和易读。
然后这里需要说一下使用这个库的注意事项,其实就一点,而且还有点烦,就是这个库内部的方法不会分析一些 HTML 标签,比如 img 标签。
会导致一些问题,例如文章中有一个图片:
<img src="http://example.com/图片.jpg" />
会被这个库修正为:
<img src="http://example.com/ 图片.jpg" />
这样肯定是不行的,避免的方法是把文章的文件或者图片的文件名改成英文的格式的。
比如 pic.jpg ,或者对中文的部分增加下划线,比如 pic_图片名.jpg 这样子。
就不会被这个库当作错误排版纠正了。
接下来我们来把这个项目应用到 WordPress 上,Composer 安装的过程这里就跳过了,和往常一样,直接上 DEMO 。
//添加钩子
add_action('save_post', 'aya_save_formatting');
//循环方法
function aya_save_formatting($post_id)
{
//检查是否为自动保存
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
//检查用户权限
if (!current_user_can('edit_post', $post_id)) {
return;
}
//防止进入递归,先注销钩子
remove_action('save_post', 'aya_save_formatting');
//获取文章内容
$post_content = get_post_field('post_content', $post_id);
//对文章内容进行格式化处理
$formatted_content = aya_chinese_type_setting($post_content);
//更新文章内容
wp_update_post(
array(
'ID' => $post_id,
'post_content' => $formatted_content,
)
);
//恢复钩子
add_action('save_post', 'aya_save_formatting');
}
//加载预定义类
use Jxlwqq\ChineseTypesetting\ChineseTypesetting;
//应用中文格式化实例
function aya_chinese_type_setting($content)
{
$typesetting = new ChineseTypesetting();
$formatted_content = $typesetting->correct($content, ['insertSpace', 'removeSpace', 'full2Half', 'fixPunctuation', 'properNoun']);
//返回格式化后的内容
return $formatted_content;
}
然后是一些说明:
如果你不想使用 Composer 的话,直接下载这个库的 ChineseTypesetting.php 然后 include 也是一样的,就这一个文件。
这里把实例添加到了save_post
这个动作钩子上,这个钩子其实是用来在保存文章的时候进行一些别的操作的,比如创建 meta 参数之类的。
但是我在里面用到了 wp_update_post() 方法,这样调用其实是不正规的,因为这个钩子本身就是在这个方法里面的。
所以,如果像 DEMO 这样子使用,必须先取消自己的钩子然后再恢复,不然就会因为一直进入 wp_update_post() 方法导致无限递归。
比较正规的方法是操作WP的核心钩子,例如在 wp_insert_post_data
上操作,但是核心钩子上的参数太多比较麻烦,直接这样更省事。
另外可以直接把 DEMO 中的 aya_chinese_type_setting() 方法挂载到 the_content
钩子上效果会是一样的,但是排版纠正没必要在每次加载时候都执行,在文章保存时候执行一次更加合理。
暂无评论