WordPressで301リダイレクトするには?


WordPress5.4.1でパーマリンクが%year%%monthnum%%day%%hour%%minute%%second%だったので、記事が表示されなくなりました。そこで
https://loumo.jp/archives/24890
こちらのブログのやり方が参考になると思いました。
が、この方のfunctions.phpの記述をどのようにアレンジしたらいいか分かりません。
この方は
/wp/archive/20200430010203/

/archives/12345
と変更したようです。
私は上述のようにこの方のように/%year%%monthnum%%day%%hour%%minute%%second%なのですが、ドメイン/%year%%monthnum%%day%%hour%%minute%%second%なので、この方のように/wp/archive/は付いていません。また、変更はこの方と同じでパーマリンク設定で数字ベースを選択したので、/archives/%post_id%です。
つまり、/%year%%monthnum%%day%%hour%%minute%%second%を/archives/%post_id%に変更したわけです。
この方のfunctions.phpの記述のどの部分をアレンジしたらよろしいのでしょうか?

またfunctions.phpは
wp-content > themes > テーマのフォルダ > functions.php
で合っていますでしょうか?
宜しくお願い致します。

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:
  • 終了:2020/06/30 14:33:04

ベストアンサー

id:a-kuma3 No.1

回答回数4848ベストアンサー獲得回数2090

ポイント500pt

質問に書いてあるページの function.php は、リクエストの URL を "/" でばらして、その四番目が年月日時分秒になっているので、更にバラして DB を検索して post_id を手に入れる、って感じになってます。

なので、質問に書いてあるケースであれば、以下のようにすれば良いんじゃないかと思います。

function redirectToNewUrlRule() {
  $_url = explode('/', $_SERVER['REQUEST_URI']);
  if (count($_url) < 1) {           // ★ここ
    return false;
  }
  $matches = [];

  // these args are depend on your permalink setting
  if (preg_match('/^[0-9]{14}$/', $_url[1], $matches)) {        // ★ここ
    $args =  array(
      'ignore_sticky_posts' => true,
      'date_query' => array(
        'year'   => substr($matches[0], 0, 4),
        'month'  => substr($matches[0], 4, 2),
        'day'    => substr($matches[0], 6, 2),
        'hour'   => substr($matches[0], 8, 2),
        'minute' => substr($matches[0], 10,2),
        'second' => substr($matches[0], 12,2),
      ),
    );

    $amp = $_url[2] == 'amp' ? '/amp/' : '';        // ★ここ
    $the_query = new WP_Query( $args );
    if ( $the_query->have_posts() ) {
      while ( $the_query->have_posts() ) {
        $the_query->the_post();
        if ($the_query->found_posts == 1) {
          // redirect
          // setting by myself or just use get_permalink() method
          $url = home_url('/archives/' . get_the_ID() . $amp);
          wp_redirect( $url, 301 ); exit;
        }
      }
      wp_reset_postdata();
    }
  }
}

redirectToNewUrlRule();

3ヶ所しか修正してません。
最初の辺りの if 文も要らないかな、って気はします。


またfunctions.phpは
wp-content > themes > テーマのフォルダ > functions.php
で合っていますでしょうか?

その認識であってます。

id:candy1967

有難うございます!
書いてくださったそのままを子テーマのfunctions.phpに追加したところ、見事にリダイレクトしてくれました。
今回は本当に助かりました。
困っていましたので、本当に助かりました。
重ね重ね有難うございました。

2020/06/30 14:32:50

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません