概要
redirect_canonicalフィルタは、リクエストURLをサイトの基本ルールと比較してリダイレクトするために使用されます。このフィルタを利用することで、重複コンテンツの管理やSEOに適したリダイレクトを実装できます。以下のような機能を実装する際によく使われます。
- トレーリングスラッシュの追加
- wwwあり・なしのリダイレクト
- HTTPからHTTPSへのリダイレクト
- カスタムURLのリダイレクト
- 特定のページや投稿のリダイレクト
- 記事の更新に伴う古いURLからのリダイレクト
- 不正確なURLの修正
- リダイレクトループの防止
このフィルタは、WordPressのコアファイル wp-includes/canonical.php に含まれています。
構文
add_filter('redirect_canonical', 'your_custom_redirect_function', 10, 2);
パラメータ
$redirect_url(string): リダイレクト先のURL。$requested_url(string): 元のリクエストURL。
戻り値
- 変更されたリダイレクトURL。
関連する関数
使用可能なバージョン
このフィルタは、WordPress 2.7 以降で使用可能です。
含まれるコアファイルのパス
wp-includes/canonical.php
この関数のアクションでの使用可能性
| アクション | 使用可能 |
|---|---|
| mu_plugin_loaded | |
| registered_post_type | |
| plugins_loaded | |
| wp_roles_init | |
| setup_theme | |
| after_setup_theme | |
| set_current_user | |
| init | 〇 |
| register_sidebar | |
| wp_loaded | 〇 |
| send_headers | |
| parse_query | |
| pre_get_posts | |
| wp | |
| template_redirect | 〇 |
| get_header | |
| wp_head |
サンプルコード
サンプルコード1: トレーリングスラッシュを追加する
add_filter('redirect_canonical', 'add_trailing_slash');
function add_trailing_slash($redirect_url) {
if (!preg_match('//$/', $redirect_url)) {
return trailingslashit($redirect_url);
}
return $redirect_url;
}
このサンプルコードは、URLにトレーリングスラッシュがない場合、スラッシュを追加するリダイレクトを実装しています。
サンプルコード2: wwwあり・なしでリダイレクト
add_filter('redirect_canonical', 'redirect_www');
function redirect_www($redirect_url) {
if (!preg_match('/^https?://www./', $redirect_url)) {
return preg_replace('/^https?:///', 'http://www.', $redirect_url);
}
return $redirect_url;
}
このサンプルコードは、wwwなしのURLにアクセスした際にwwwありのURLへのリダイレクトを実装しています。
サンプルコード3: HTTPからHTTPSへリダイレクト
add_filter('redirect_canonical', 'redirect_http_to_https');
function redirect_http_to_https($redirect_url) {
if (is_ssl()) {
return $redirect_url;
}
return preg_replace('/^http:/', 'https:', $redirect_url);
}
このサンプルコードは、HTTPでのアクセスをHTTPSにリダイレクトする機能を実装しています。
サンプルコード4: 特定のカスタムURLをリダイレクト
add_filter('redirect_canonical', 'redirect_custom_url');
function redirect_custom_url($redirect_url){
if (strpos($_SERVER['REQUEST_URI'], 'old-page') !== false) {
return home_url('/new-page');
}
return $redirect_url;
}
このサンプルコードは、「old-page」でのアクセスを「new-page」にリダイレクトする機能を実装しています。
サンプルコード5: 不正確なURLを修正
add_filter('redirect_canonical', 'fix_incorrect_url');
function fix_incorrect_url($redirect_url) {
if ($_SERVER['REQUEST_URI'] == '/incorrect-url') {
return home_url('/correct-url');
}
return $redirect_url;
}
このサンプルコードは、不正確なURLへのアクセスを正しいURLにリダイレクトする機能を実装しています。