functions.phpから301リダイレクトを行う方法

公開日:2025(令和7)年3月14日/最終更新日:

WordPress Customize Ideas | Personal WP Customization Notes (PWCN)

【景品表示法に基づく表記】ページ内のコンテンツには、商品プロモーションが含まれています



通常は.htaccessへ書くのが妥当なんでしょうが、いちいち.htaccess開いて編集するのが大変ですよね。

以下のコードは有効化しているテーマのfunctions.phpへ追記して、リダイレクトさせたいページの旧パーマリンクと新パーマリンクを列記すれば301リダイレクトされるようにするコードです。

これで大量のリダイレクトの記述が必要だったり、後々編集する場合にも便利になりますね。

function pwcn_301_redirects() {
    // 古いパーマリンクと新しいパーマリンクのマッピングを配列で定義
    // 新旧パーマリンク先頭の/はそのままにする
    // コード例では末尾に/があるが、現在のパーマリンク構造を見てありなしの判断をすること
    $redirects = array(
        '/old-page-1/' => '/new-page-1/',//前者は古いパーマリンク、後者は新しいパーマリンク
        '/old-page-2/' => '/new-page-2/',
        '/old-page-3/' => '/new-page-3/',
    );

    // 現在のリクエストURIを取得
    $request_uri = $_SERVER['REQUEST_URI'];

    // リダイレクトが必要かチェック
    if (array_key_exists($request_uri, $redirects)) {
        // 新しいURLを取得
        $new_url = home_url($redirects[$request_uri]);
        
        // 301リダイレクトのためのHTTPレスポンスコードを設定
        wp_redirect($new_url, 301);
        exit();
    }
}
add_action('template_redirect', 'pwcn_301_redirects');

上記コードの「’/old-page-1/’ => ‘/new-page-1/’」の部分を変更(または追加削除)していくと、旧パーマリンク宛にあったアクセスが新パーマリンクでアクセスされるようになります。

また、301リダイレクト(永久リダイレクト)として処理されますから、検索エンジンにもURLが変更となったことを明示できます。

補足 投稿IDから投稿名なら一括で変更させることもできるけど..

前述のコードの代わりに以下のコードを使うことで、投稿ID(%post_id%)をパーマリンクにしていたサイトを投稿名(%postname%)に変更した場合にすべての投稿をリダイレクトさせることもできますが、意図しない結果となることがあるので、面倒でも1件1件追加したほうが無難でしょう。

function pwcn_301_redirects() {
    // 現在のリクエストURIを取得
    $request_uri = $_SERVER['REQUEST_URI'];

    // 投稿IDを取得
    if (preg_match('/\/([0-9]+)\/?$/', $request_uri, $matches)) {
        $post_id = intval($matches[1]);

        // 投稿が存在するか確認
        $post = get_post($post_id);
        if ($post) {
            // 新しいスラグを取得
            $new_slug = $post->post_name;
            // 新しいURLを生成
            $new_url = home_url('/' . $new_slug);

            // 301リダイレクトのためのHTTPレスポンスコードを設定
            wp_redirect($new_url, 301);
            exit();
        }
    }
}
// add_action('template_redirect', 'pwcn_301_redirects');

補足 別ファイルで管理したほうがいいかも..

今回のように.htaccessではなくfunctions.phpから301リダイレクトをかけるケースでは、たくさんの投稿のリダイレクトを行うことが多く、テーマのfunctions.phpへ直接コード追加するとコードが長くなって使いづらいかも知れません。

そんな時は別のphpファイルをテーマフォルダ内に追加して、functions.phpからはそのファイルの内容を実行するという形にした方がいいでしょう。

以下はテーマフォルダ内に「redirects」というphpファイルを追加した場合に有効化しているテーマのfunctions.phpへ追加するコードです。

include get_theme_file_path( '/redirects.php' );
, , ,



Lolipop ServerMoshimo Ad x-serverMoshimo Ad

WordPress Customize Ideas | Personal WP Customization Notes (PWCN)
プラグインの翻訳ファイルを確実に適用させるベストな方法(メモ)