[WordPress開発] パーマリンクに日本語が含まれているときに警告を出す
パーマリンクとは
ブログを作る上でよく使われる、オープンソースソフトウェアである「WordPress」の、ちょっとした開発ネタを書きたいと思います。
WordPressの設定では、パーマリンクを有効化しているWebサイトも多いかと思います。ちなみにパーマリンクとは、以下のようなものです。
パーマリンクとは、Webページの中の個別のコンテンツに対して設けられたURLのことである。特に、ブログにおける個々のエントリー(毎日の記述)に対して割り当てられたURLを指すことが多い。パーマリンク(Permalink)は、恒久・不変を意味する「パーマネント」(permanent)と「リンク」(link)が掛け合わされた造語である。
端的に言うと、ブログ内の個々のエントリーに対する、ユニークな名前のことです。これを、WordPressを使っている多くのブログサイトではURLになるように設定しています。弊社ブログもそのようにしています。
パーマリンクに日本語を使いたくない
このパーマリンクですが、日本語も使えるようになっています。その場合はURLエンコードされるので、URL自体は日本語を使わない場合と比べると長くなってしまいます。
例えば、以下のようなパーマリンクにしたい場合、
以下のようになります。
こうなってしまった場合、エントリーがシェアしづらくなる問題を抱えてしまうことになります。
- 文字数制限のあるサービスでシェアできない
- URLで紹介される可能性が低くなる(心理的にシェアしづらくなる)
以下の記事でも解説されていますので、あわせてお読みください。
こうなってしまわないように、WordPressをカスタマイズすることで解決できる方法を考えました。
WordPressをカスタマイズする
今回は下記の機能を作りました。
- 記事の編集画面を開いたときに発動する
- パーマリンクを正規表現にマッチしなかった場合にアラートを表示する
- 保存自体を弾くことは行わない
- 処理が複雑になってしまうため、シンプルにアラートだけ出すようにしている
まず wp-content/themes/<任意のテーマ>
の中に、下記のファイルを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php /* ***************************** * * パーマリンクを検証する * **************************** */ add_action( 'admin_notices' , 'validate_permalink' ); function validate_permalink() { global $pagenow ; if ( $pagenow == 'post.php' ) { $post_name = get_post()->post_name; $decoded = urldecode( $post_name ); if (!preg_match( '/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+/' , $decoded )) { echo '<div class="message error"><p>パーマリンク(URL)に日本語が含まれています!修正してから公開してください。</p></div>' ; } } } |
解説します。
まずこのアクション自体は admin_notices
をフックしていますので、管理画面のいずれかを開くたびに発動します。11行目では post.php
(つまり、記事の編集画面) の場合のみ処理するようにしています。
12行目で post_name
からパーマリンクを拾ってきています。この時点でURLエンコードされた状態で取得できるので、13行目でデコードしてから検証を行なっています。そうしなければ、URLエンコードされた文字列の状態で検証してしまうことになり、日本語として弾くことができません。
15行目では message error
というクラスを使うことにより、WordPressの管理画面のエラーメッセージとして出力しています。
あとは、このファイルを functions.php
で読むように設定するだけです。
1 | require ( dirname( __FILE__ ) . 'validate_permalink.php' ); |
動作確認
ということで、動作を確認してみます。記事を新規作成し、パーマリンクが日本語の状態で保存します。
エラーが表示されました。これを修正すると…
エラーが消えます!
まとめ
正規表現の部分はカスタマイズすれば「ある文字列だけ除外する」ということもできますし、「記号すら許さない」なんてこともできます。
日本語でパーマリンクを作りたくない場合、ぜひ試してみてください。
参考
本記事に執筆にあたり、下記のブログを参考にしました。