カタラボ

ものづくりっておもしろいよね!というブログ

パーマリンク編集時にスラッグが日本語で自動設定されるのを禁止する

WordPressのパーマリンクを自分で編集できる機能(スラッグ)は非常に便利です。

ただ初期状態のままでは記事の日本語タイトルがそのまま自動設定されるてしまうのがイヤだったので、英語数字が自動設定されるようにテーマをカスタマイズしました。

日本語のタイトルを書けば日本語のスラッグが自動設定される

私が使用しているパーマリンク設定は「月と投稿名 https://kc-technology.info/2015/01/sample-post/」という設定です。

そうすると、新規に記事を作成するときにパーマリンクは以下のように自動で設定されます。

記事タイトルを「あいうえお」と書くと、パーマリンクの最後の投稿名が日本語で「あいうえお」と自動で設定されます。

日本語URLは使いたくない

日本語URLにはSEO効果があるともいわれるので使いたい人もあると思いますが、私は日本語URLは使いたくない派です。

理由は日本語URLはSNSなど、環境によっては%e%f%〜といった意味不明かつ異常に長いURLになってしまうのがイヤなのが一点。

もう一点は単純にURLに日本語が入っているのが気持ち悪いからです。URLってWebページのIDナンバーみたいなものだと思うので、なんか違和感があります。

もちろん、例えば日本の住所の地名は日本語だよという風に考えることもできます。だからまあ感覚的なことです。

パーマリンク設定からではうまくいかなかった

WordPress管理画面の[設定]→[パーマリンク設定]の設定をいろいろといじってみたのですが、うまくいきませんでした。

例えば投稿id(%post_id%)をカスタム構造で設定したら、スラッグ編集自体ができなくなってしまいました。

function.phpに以下のコードを挿入する

そもそも私がなぜ今回のカスタマイズを思いついたかというと、姉妹ブログ「かたつむりチャンネル」で利用しているSTINGERという無料テーマでは、日本語スラッグがはじめから禁止されているからなんです。

そこでSTINGERに関して調べてみるとfunction.phpを利用して実現されていることがわかりました。※以下の記事の「日本語スラッグを数字に変更」という箇所。

つまり以下のコードをfunction.phpに挿入すればスラッグが例えば「post123」という風に自動設定されるようになります。

//WordPress の投稿スラッグを自動的に生成する
function auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
    if ( preg_match( '/(%[0-9a-f]{2})+/', $slug ) ) {
        $slug = utf8_uri_encode( $post_type ) . '-' . $post_ID;
    }
    return $slug;
}
add_filter( 'wp_unique_post_slug', 'auto_post_slug', 10, 4  );

実際に新規に記事を書くとこうなります。

あとがき

本当はfunction.phpのコードの内容を理解して、自分なりのアレンジを加えて公開しようと思っていたのですが、phpコードの意味がわからず断念しました。

WordPressを使いこなすにはPHPの勉強も必須の課題だと思いました。

関連記事