旧ページにアクセスされた時にリダイレクトさせる方法について解説します。
リダイレクトのみ
下記のように記述することで「〇〇.〇〇/old_entry」にアクセスがあった場合「〇〇.〇〇/new_entry」にリダイレクトするようになります。template_redirectのタイミングでフックを呼び出し、wp_safe_redirectでリダイレクトしています。
functions.php add_action("template_redirect", function () { if (is_page('old_entry')) { wp_safe_redirect(esc_url( home_url() ).'/new_entry' ); exit; } });
リダイレクト(親スラッグがあった場合)
※親スラッグは私が今説明する為に勝手に使いました。実際の使い方は違う可能性もありますので、ご注意ください。
例えば「〇〇.〇〇/old_entry」と「〇〇.〇〇/jobs/old_entry」というページがあったとします。その場合 if (is_page(‘old_entry’)) だとどちらも該当し、どちらもリダイレクトされてしまいます。その場合でも「〇〇.〇〇/old_entry」のみリダイレクトされるようにします。
functions.php add_action("template_redirect", function () { if (is_page('old_entry')) { $page = get_post(); if (empty($page->post_parent)) { wp_safe_redirect(esc_url( home_url() ).'/new_entry' ); exit; } } });
get_post();を使ってページの要素を取得し、post_parent(「〇〇.〇〇/jobs/old_entry」の場合jobsにあたる)が空の場合のみリダイレクトするようにしてます。get_post();で取得した要素を詳しく確認するのはvar_dump(get_post());(場合によってはexit;も)やget_post();の関数リファレンスを閲覧するのが良いと思います。
リダイレクトと同時にGETパラメータを変数として受け渡す
functions.php add_action("template_redirect", function () { if (is_page('old_entry')) { $page = get_post(); if (empty($page->post_parent)) { $args = []; if (isset($_GET['id'])){ $id = $_GET['id']; $url = get_permalink($id); $get_post = get_post($id); $title = $get_post->post_title; $args = array('id' => $id, 'title' => $title, 'url' => $url); } if (isset($_GET['option'])) { $args['option''] = $_GET['option'']; } wp_safe_redirect(add_query_arg( urlencode_deep($args) , esc_url( home_url() ).'/new_entry' )); exit; } } });
※注意 誰かが入力して表示させる場合など、必要に応じてエスケープ処理をして無害化してください。
if (isset($_GET[‘id’]))で$_GET[‘id’]があった場合$argsに変数を配列でセット、add_query_argを使って$argsをリダイレクト時に受け渡しています。また$_GET[‘option’]があった場合それも$args配列に加えて受け渡しするようにしています。後は受け取る側でも$id = $_GET[‘id’]で変数を取得し、文字化けを解消したいのであればwp_unslashなどで文字化け解消すればOKです。その後の表示はesc_html($id);みたいな感じが良いと思います。
コメント