こんにちは!株式会社プロットハブのエンジニア小野です。
今回はWordPressのリライトルールについて解説します。
Bogoを使って多言語対応している際にリライトルールを設定する必要がありました。
どのようなルールで設定するのか、ワードプレスの仕様も含めて解説します。
Bogoの設定方法や使い方についても解説しているので参考にしてください。
WordPressサイトをBogoで簡単に多言語化!手軽に始める方法を解説
コピペで完了!Bogoでカスタム投稿を多言語化する最速の方法
リライトルールとは
リライトルールは、ウェブサーバーソフトウェアであるApacheが提供するmod_rewriteモジュールの一部で、URLの書き換えを実現するための指令です。
具体的には、クライアントからのHTTPリクエストを受け取った際に、特定のパターンのURLを別のURLに書き換える動作を行います。
WordPressのパーマリンクの設定は、管理画面の「設定」にある「パーマリンク設定」から変更できます。
設定項目には「基本」「日付と投稿名」「月と投稿名」「数字ベース」「投稿名」の5つの基本設定があり、さらに利用者がタグを組み合わせる「カスタム構造」を加えた6種類の中から選択できます。
WordPressではRewrite APIが提供されており、カスタムフックや関数を使ってリライトルールを追加することができます。
Rewrite API
WordPressのリライトルールの仕組み
WordPressではアクセスされると、リクエストされたURLからリライトルールに従って、どのページを表示するかを決定します。
正規表現: "^/([^/]*)/?$"
url: https://example.com/news
このようなurlにアクセスがあった際にnewsが正規表現のパターンにマッチします。
リライトルールからindex.php?post_type=news
であることがわかります。
この情報を元にデータベースから記事を取得して表示します。
活用する場面
リライトルールを設定することでurlを自由に変更することができるので、SEO対策にも活用できます。
今回は多言語対応をした際に英語のタクソノミーのアーカイブページが404になってしまったのでリライトルールを設定しました。
rewrite_rules_arrayを使った独自のリライトルールの設定方法
WordPressのリライトルールは、rewrite_rules_arrayというフィルターフックを使って設定することができます。
add_rewrite_rule関数を使用してリライトルールを追加するコードを書いていたのですがなぜか反映されませんでした。
そのため今回はrewrite_rules_arrayを使ってリライトルールを設定します。
多言語のurlでタクソノミーをアーカイブを表示するために以下のように設定しました。
functions.phpに以下のコードを記載します。
配列のキーに正規表現、値にリライトルールを設定します。
function newUrlRewrite($rules){
$myRule = array();
$myRule["^en/news/news_category/([^/]*)/?$"] = 'index.php?taxonomy=news_category&tags=$matches[1]&lang=en';
$myRule["^zh/news/news_category/([^/]*)/?$"] = 'index.php?taxonomy=tags&tags=$matches[1]&lang=zh';
return array_merge( $myRule, $rules );
}
add_action('rewrite_rules_array', 'newUrlRewrite' );
ここで$matches[1]
が出てきていますがこれは正規表現にマッチした文字列を取得するための変数です。$matches[1]
は一番最初にマッチした文字列を指しています。
一番最初は[0]ではないので注意が必要です。
まとめ
リライトルールを知るとurlの構造を自由に変更できるので便利です。
今まであまり触れてこなかったリライトルールについても学ぶことができたので良かったです。
弊社ではWordPressを使用したコーポレートサイトやメディアサイトの制作を行っております。
SEO対策や多言語対応などの要望があればお気軽にお問い合わせください。
コメント