2016/08/31 22:49:47

wordpressでカスタムフィールドをつかった301リダイレクトを行う


Warning: Attempt to read property "post_excerpt" on null in /home/kpkyvkzp/public_html/unskilled.site/wp-content/themes/unskilled2/content-header-eyecatch.php on line 5
目次(クリックするとジャンプします)
  • 1:
  • 1.1:.htaccessもプラグインも使わない
  • 1.2:カスタムフィールドを使ってリダイレクト
  • 1.2.1:リダイレクトさせる関数
  • 1.2.2:テンプレートファイルへの記述
  • 1.2.3:カスタムフィールドの設定
  • 1.3:補足・ハマりポイント
  • 1.4:コンテンツ重複について
  • 1.5:まとめ

.htaccessもプラグインも使わない

サイトを統合したり、URLを変更したりするときにはリダイレクトを行うのが一般的です。

よく行われるのは.htaccessにリダイレクトのための記述を入れる方法です。

しかしこの方法では少なからずサーバファイルを触らないといけませんし、htmlサーバソフトの種類に酔ってやり方が異なります。

apacheを使っているならモジュールをつかうことになるのですが、記述が初心者向けとは言いがたいのでリダイレクトを失敗してしまう人もいるかもしれません。

またプラグインを使う方法を紹介しているサイトも沢山ありますが、今回はプラグインは使いません。

カスタムフィールドを使ってリダイレクト

WordPressを使っているなら、WordPressの仕組みを使ってリダイレクトしてみましょう。

functions.phpに少しの記述と、カスタムフィールドを使ったリダイレクトを紹介します。

サイト統合のためサイトAの記事をサイトBに移動させた状況を想定します。

サイトAの記事にアクセスした時にサイトBの対応する記事へリダイレクトされるという動きです。

リダイレクトさせる関数

fuctions.phpに以下の関数を記述します。これがリダイレクトを実現させるコードになります。

function redirect(){
    if(is_single()){
        if (have_posts()){
            the_post(); 
            $redirect = get_post_meta( get_the_id(), 'redirect', true );
            if (empty($redirect) !== true){
                header( "HTTP/1.1 301 Moved Permanently" );
                header("location: $redirect");
                exit;
       }
     }
  }
}

やっていることは簡単で、ループの作成→記事IDの取得→指定した記事IDの特定のカスタムフィールドの値(URL)を取得→そのURLを使ってリダイレクト、という感じです。

永久的なりダイレクトなので301ステータスコードを入れています。

もし一時的なら302ステータスコードを指定します。

header( "http/1.1 302 moved temporarily" );

テンプレートファイルへの記述

実際にこの関数はすべてのhtmlの一番最初になくてはなりません。何かが出力されたあとではheader関数がエラーを起こします。空白もダメです。

なのでこの関数はget_header()よりも前に記述します。

一番簡単なのはheader.phpの一番上に以下のように記述すると良いと思います。

<?php redirect(); ?>
<!DOCTYPE html>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>" />
<meta name="viewport" content="width=device-width" />
<title><?php wp_title( '|', true, 'right' ); ?></title>
〜〜〜〜〜
〜〜〜〜〜
〜〜〜〜〜

これでリダイレクトさせる仕組みは整いました。後はカスタムフィールドにリダイレクト先のURLを設定するだけです。

カスタムフィールドの設定

リダイレクトさせたい記事のカスタムフィールドを以下のように設定します。

redirect

カスタムフィールド名はredirectにしていますが、これはfunctions.phpに書いた関数でカスタムフィールド名をredirectと指定しているためです。任意の名前でOKですが、functions.phpの記述に合わせる必要があります。

これでURLが設定できましたので、この時点でもうリダイレクトされるようになっています。

あとはちゃんとリダイレクトされるか確かめてみてください。

補足・ハマりポイント

コンテンツ重複について

リダイレクトさせる際、サイトAとサイトBには同時に同じコンテンツが存在することになります。

ちゃんと公開する順番を考えないとコンテンツ重複になりかねません。

コンテンツ重複はgoogleにペナルティを受ける可能性もありますので注意が必要です。

手順としてはサイトAからリダイレクトさせたい記事をサイトBに移します。

この時点でサイトBでのこの記事のURLが確定しますが、下書きなどの非公開ステータスにしておきます。

サイトAの記事のカスタムフィールドにサイトBに移した記事のサイトB上でのURLを設定します。

そうしたらサイトBのリダイレクト先の記事を公開状態するといった感じで作業するとコンテンツが重複せずに済むかと思います。

まとめ

この方法ではWordPressの管理画面内でリダイレクト作業が完結させられます。

カスタムフィールドを使うことでリダイレクトさせたい記事とリダイレクト先URLを1対1で対応させるのが簡単にできます。

リダイレクトする必要が出てきた時にはこんなやり方もあると思いだしてみてください。