自動生成されるスラッグを自分好みに修正する

新規投稿を追加 ‹ Wood Roots.blog — WordPress

WordPressのスラッグを自分で入力しない場合、記事タイトルがスラッグとして使用されます。
この自動的に設定されるスラッグをもうちょっと好きなようにしたいと思い、修正する方法について調べてみました。

AD

自動生成されるスラッグのルール

スラッグは以下の様なルールで生成されます。

・他の記事に同一スラッグがある場合、「-2」(-3、-4…)が付加される
・記事タイトルをURLエンコードし、200文字以内に収まるように末尾を切り捨てる

ちなみに、このスラッグを生成する処理はwp_unique_post_slugという関数が行っていますので、詳しく知りたい場合はソースも参考にしてみてください。

スラッグを短くしてみる

URLの長さについて特に規定はありませんが、あまりに長すぎるURLは不都合が起きる可能性があります。

ブログ運営においてははてブとページ名の長いWikiの、登録URLの長さ問題で指摘されているように、はてブされた際の問題が大きいかと思います。

そこで、スラッグが200文字以下ではなくURLの長さが255文字以下になるようにスラッグを生成するアクションフックを書いてみました。

アクションフック

以下をfunctions.phpに記述します。

transition_post_statusは投稿の状態(公開、下書き、レビュー待ちなど)が変更されたタイミングで実行されるアクションフックです。
記事投稿時に実行したい処理がある場合は、このtransition_post_statusを使うのが一番よさそうな感じです。

_truncate_post_slugはスラッグを指定文字数に切り捨てる関数です。
URLエンコード後の文字列を切り捨てる場合は変なところで切ると文字化けする恐れがありますが、そのあたりも考慮していい感じにやってくれます。
ソースコードもご参照ください。

$newpost['post_name']という配列がスラッグを指定している部分ですので、今回のような文字数調整だけでなく、たとえばカテゴリ名称をスラッグに加えたり日付を加えたりなど、自分好みにいろいろできるかと思います。

おまけ:英語のスラッグを翻訳APIを使って自動でつけてみる

スラッグは英語にしたいけどいちいち英文を考えるのがめんどくさい、ということもあるかと思います。

そういうときにうってつけな、WP Slug Translateというプラグインがあります。

WordPress › WP Slug Translate « WordPress Plugins

このプラグインはスラッグを設定する際にMicrosoft Translatorという翻訳APIを使うことで英文に翻訳し、スラッグに設定してくれます。

Microsoft Translatorを自分で使ってみたい場合は、過去記事Microsoft translate APIをクラスライブラリを使って簡単に翻訳を行うも参考にしてみてください。

AD

Share

Commentsコメント

メールアドレスは公開されません。コメントは必ずご入力ください。

HTMLタグは使用できません。ソースコードを書き込みたい場合はCodetterGistCodePenなどのご利用が便利です。

コメントはまだありません。