WordPressのカスタマイズ方法やプラグインレビューを中心に、パソコン/動物/植物のことなどを紹介するホームページです

【WordPress】プラグインなしで「英語」版のサイトを作る -制作備忘録-

公開日:2021(令和3)年5月22日/最終更新日:

WordPressのカスタマイズ情報



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

そんなのプラグインを使えば簡単じゃん!と言われそうな事柄ですが、仕組みも知らずに手っ取り早くプラグインというのは、「プラグインが将来的に対応しなくなったら終わり」になる可能性が高いので、今回はあえてプラグインなしで作ってみることにしました。

本記事の方法を使って作成した当サイトの英語版はこちらになります(任意のページのみを英語化していること、英文に関してはGoogle翻訳の力を90%以上借りて作成・運営しています)。2021年5月22日現在、このページも英語対応にしています。このページ右上の「View English Page」ボタンをクリックすると本記事の方法を用いて作成した英語ページをご覧いただけます。

本記事で紹介する英語サイトの構築にあたっては、以下の要件・条件で行っています。

毎度のごとく作りながら試行錯誤しながらの紹介記事ですので、興味のある方は読み進めてください。

多言語化を行うプラグインも同じことをしていると思われますが、本記事は、あくまでもこのサイト(私の管理するサイト)上で行ったものであり、紹介している方法で英語サイト(他の言語の副サイト)を構築しても検索エンジンにきちんと認識されることは保証できません。
 本記事の方法でマルチランゲージ(多言語)としてページが認識されているかは、文末にある「多言語ページとして認識されているかの確認方法」をご覧のうえ検証ください。

サブディレクトリへ新規にWordPressをインストールする

自動でも手動でもいいので、サブディレクトリへ新たにWordPressをインストールします。やり方を解説することもできるのですが、以下の理由により、あえて紹介しませんのでご了承ください。

サブディレクトリ?インストール?という方は、分からないまま行うと今までのサイトを壊す可能性がありますので、残念ながらこの段階であきらめていただいた方がいいと思います。

日本語版にした場合には設定言語(「設定」をクリックした画面)を英語にすればOKですし、英語版にした場合には、管理ユーザーの言語を日本語にすれば済む話ですので、WordPress本体は英語版・日本語版どちらでも構いません。

厳密に言うと違いがあるかも知れませんが、そこまで検証はしていません。私の場合は日本語版をインストールして、設定を英語としました。

日本語サイトの環境移植

WordPress本体やテーマ・プラグインはもともと英語圏で作られたツールですので問題はないかとは思いますが、日本語のみ対応しているサードパーティのテーマやプラグインは英語では使用できません(自身で多言語化すれば可)。

日本語のみでしか使えないものを日本語サイトで使っている場合には、多言語化するか、そのテーマ・プラグイン以外(英語で使えるもの)を使用することになりますから事前に準備しておく必要があります。

英語サイトをインストールしたら、テーマとその設定、必要なプラグインとその設定を目で見ながら1つ1つ行っていきます。

手作業で移植と聞くと大変そうに感じられるかも知れませんが、別タブで日本語と英語のページを開いてコピペしていけば特に大変な作業でもありません

QA AnalyticsQA Analytics

英語化する記事の移行

まずはいくつかの記事を作成していかないとサイトの雰囲気なども全く分かりませんから、表示テストもかねて数記事を英語サイトへ移植して作っていきます。

全記事を移植(コピー)するのであれば、全投稿のエクスポート・インポートをする(エクスポート・インポート機能は記事限定すると画像が受け渡されないので注意)か、ファイル・フォルダとデータベースをコピーするかのいずれかですが、個人的には後者の方が簡単だと考えます。コピーサイトを作ったら、内部リンク・内部画像のURL変更をお忘れなく

これも完全に独立サイトでということであれば画像を日本語サイトからダウンロードして、それを英語サイトへアップロードして・・・なんて大変な作業になりますが、私のように「日本語サイトがメインで、そのうちの英語にした方がいいかな?というものだけを英語サイトで作る」のであれば、そこまでする必要はないでしょう。

親サイト(日本語サイト)から選択的に画像を取得するなら以下のプラグインを使うと簡単でしょう。

「Bulk Attachment Download」プラグインはPHP8.0ではエラーが出ますのでご注意ください

全部独立!を目指す方は以下のプラグインでメディアのファイルを一括で取得することもできます。

ただアイキャッチ画像については、サイトごとに設定する必要がありますから、日本語サイトから移植するなり、新たに作ってアップロードするなりしておけばよいでしょう。

記事のコピーは簡単(ブロックエディタで更に簡単になった印象があります)。英語化する記事の編集画面を開き、全部のブロックをコピーして、英語サイトの編集画面へ貼り付ければOKです。カテゴリーやタグなどについても必要に応じて作成していけばよいでしょう。

日本語サイト内の内部リンクになっているものついては、日本語サイトのページへのリンクが「外部リンク」扱いになるので、適宜書き換える必要があります(特にEmbedカードを使っている場合は「外部リンク」はカード化されませんから、公開前に確認しましょう)

とここまではそれほど技術の必要なことではないので、コツコツやれば大丈夫でしょう。むしろ大変なのはここからになります。

英語ページ(日本語ページ)があることを知らせる記述をする

恐らく(私の想像の域を超えませんが)英語サイトをそのままにしていても、検索エンジンクローラーがそのうち巡回して、ヘッダーの言語タグと内容から「英語ページだから英語ページとしてインデックスしていこう」という流れで徐々に認識されていくとは思います。

が、できれば日本語ページ・英語ページそれぞれに「このページには別の言語のページがありますよ!」と知らせた方が、検索エンジンからの認識が速くなろうかと思います。

他の言語のページがありますよ!というのを知らせるには、他の言語ページがあるページのヘッダー内に以下の記述を行います。

<link rel="alternate" href="日本語ページのURL" hreflang="ja" />
<link rel="alternate" href="英語ページのURL" hreflang="en" />

さらに、英語・日本語で書かれていても内容が同じページが存在してしまうことになることから検索エンジンが「重複コンテンツ」と誤認識してしまわないように、日本語サイト・英語サイトとも「日本語サイトが本来のサイトですよ!」と知らせるcanonicalタグを入れておけば万全でしょう。

<link rel="canonical" href="日本語ページのURL" />

テーマやSEO系のプラグインで既に出力されている可能性がありますので、ソースで確認して適切な表記になるよう調整する必要があります。

ここで問題が発生!今回の方法では、「日本語ページ」と同じ(または決まった法則で呼応している)「英語ページ」が存在するわけではありませんから、全部のページにこのタグを出力すると不都合が起きます。

要するに検索エンジンには「英語ページがありますよ!」「日本語ページがありますよ!」と言っておいて、いざ検索エンジンクローラーが訪問したらそんなページないし・・という事態が発生するということです。これがページ評価にどう影響するかは不明ですが、できれば避けたいところですね。

これを解消するために次項の内容と併せて工夫する必要があります。

日本語ページに対する英語ページがあることを半自動で知らせる設定

この記事で一番肝となる事項であり、一番今回のカスタマイズで大変な部分だと思いますし、検索エンジンへきちんと情報を伝える大切な部分ですから、しっかり理解して進めるようにしてください。

以下の内容は既に日本語サイトがある(主サイトがある)状態で英語サイト(副サイト)を同じドメイン上のサブディレクトリへ追加した場合のものですので、状況が違う場合には適宜変更する必要がありますのでご注意ください。

canonicalタグの扱い

WordPressで何の気なしに投稿している方はご存じないかも知れませんが、通常各ページのhtml上には「このページの正しいURLはこれで間違いありません」というのを検索エンジンへ知らせるCanonicalタグというのが出力されています。例としては以下の通りです。

<link rel="canonical" href="ページのURL" />

どこかのページで右クリック→「ソースを表示」して、このタグを探してください。

そもそもCanonicalタグが存在しない場合は本記事の方法を使うかどうかに関わらず、検索エンジンへ正確な情報を伝えるというSEOの観点から必ず出力するようにた方がよいと思います。

英語サイト側(副サイト側)にこのタグがあると、それぞれが独立した内容のサイトと認識されてしまい、日本語と英語のページでページが重複する(内容は同じなので)こととなってしまいますから、英語サイト側のCanonicalタグ出力を停止します。なお、主サイト(日本語サイト)側はそれが本来のURLなので停止する必要はありません。

Canonicalタグの出力はテーマ・プラグインで行っており、サイトによってさまざまですので、テーマ・プラグインのマニュアル等を参照の上、自身のサイトで設定してください。

副サイト(英語サイト)側の出力設定

副サイト側では検索エンジンに対して以下の内容を伝える(html上で明示する)必要があります。

  • このページが英語圏向けのページであること
  • このページには同じ内容の日本語のページが存在すること
  • このページの主となるページは日本語のページであること(=Canonicalタグ)
  • もしも英語ページのみ存在する場合、主となるページは英語ページであること(=Canonicalタグ)

※最後の項目は、最初は日本語サイトの英語版として作っていたけど、英語圏向けだけの記事が存在するようになった場合、このページは英語ページしかないですよ!と知らせるものになります。

そして、上記の情報の中で、自動で引っ張れない情報をカスタムフィールドを使って作成します。

カスタムフィールドの作成・変更・更新についてはプラグインに任せた方が簡単なので、今回は「Custom Field Suite」を使いました。

必要なのは「日本語ページのURL」です。(「cf_japanese_url」というカスタムフィールドを作成します)。

カスタムフィールドを作成したら、以下のコードを有効化しているテーマのfunctions.phpへ追記してください。

/**** マルチランゲージのヘッダー出力(副サイト) ****/
function hab_add_multi_lang_header_child(){
//変数の設定
	global $wp_query;
	$postID = $wp_query->post->ID;
	$ha_mlang_customfield = get_post_meta($postID, 'cf_japanese_url', true);
	$ha_ima_url=(empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
//投稿・固定ページ以外
	if(!is_singular()){
		echo '<link rel="canonical" href="' .$ha_ima_url. '" />';	
//投稿・固定ページでcf_japanese_urlに入力がある場合
	}elseif($ha_mlang_customfield){
		echo '<link rel="alternate" href="' .$ha_mlang_customfield. '" hreflang="ja" />';
		echo '<link rel="alternate" href="' .$ha_ima_url. '" hreflang="en" />';
		echo '<link rel="canonical" href="' .$ha_mlang_customfield. '" />';
//投稿・固定ページでcf_japanese_urlに入力がない場合
	}else{
		echo '<link rel="canonical" href="' .$ha_ima_url. '" />';	
	}
}
add_action('wp_head', 'hab_add_multi_lang_header_child',1);
【コードの簡単な説明】

挿入したコードは以下のような仕組みで構築していますので、見比べながら確認してみてください。

  1. ループ外で当該記事(投稿)の情報を取得するためのgrobal関数等を設定
  2. 個別の投稿・固定ページに対してのみ処理するようにする(is_singular)
  3. 個別の投稿・固定ページ以外はCanonicalタグを英語サイトのページのままにする
  4. 個別の投稿・固定ページで、1によって抽出したカスタムフィールド(cf_japanese_url)に値が存在するかで条件を分ける(値のないものは英語ページのみ存在するという判断)
  5. カスタムフィールド(cf_japanese_url)に値が存在する場合には、「日本語ページのURL」「英語ページのURL」を出力し、「日本語ページ」をCanonicalタグに指定する
  6. カスタムフィールド(cf_japanese_url)に値が存在しない場合には、「英語ページ」をCanonicalタグに指定して出力する

最初はいろいろとごちゃごちゃコードを書きましたが、結局はこの要件で満たせそうでしたので整理したものが上記コードになります。

上のコードではPHP8.0で「PHP Warning: Attempt to read property “ID” on null in…」という警告が出ることがあります。PHP8.0の環境で使う場合には、少し複雑になりますが以下のコードを使用ください(結果は同じになります)。

本記事のコードだけでなく、PHP8.0で「PHP Warning: Attempt to read property “ID” on null in…」という警告が出る場合の対処方法については、「PHP8.0で「Attempt to read property “〇〇” on null in…」というWarning(警告)が出た場合の検証と対処方法(例)」をご覧ください。

/**** マルチランゲージのヘッダー出力(副サイト) ****/
function hab_add_multi_lang_header_child(){
//フロントページ、アーカイブページ
if(!is_singular() || is_front_page()){
	$ha_ima_url=(empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];	
	echo '<link rel="canonical" href="' .$ha_ima_url. '" />';	
}
	
//固定ページでのフロントページを除くすべての投稿と固定ページ
if(is_singular() && !is_front_page()){
	//変数の設定
	global $post;
	$ha_mlang_customfield = get_post_meta($post_id, 'cf_japanese_url', true);
	$ha_ima_url=(empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
	
if(empty($ha_mlang_customfield)){
//cf_japanese_urlに入力がない場合
		echo '<link rel="canonical" href="' .$ha_ima_url. '" />';	
}else{

//cf_en_urlに入力がある場合	
		echo '<link rel="alternate" href="' .$ha_mlang_customfield. '" hreflang="ja" />';
		echo '<link rel="alternate" href="' .$ha_ima_url. '" hreflang="en" />';
		echo '<link rel="canonical" href="' .$ha_mlang_customfield. '" />';
}
	}
}

add_action('wp_head', 'hab_add_multi_lang_header_child',1);

主サイト(日本語サイト)側の出力設定

主サイト側(日本語サイト側)で出力する必要がある項目は以下になります。

  • このページが日本語圏向けのページであること
  • このページには同じ内容の英語のページが存在すること
  • 主となるページは日本語のページであること(=Canonicalタグ)

日本語サイトでも同じく「Custom Field Suite」プラグインを使って英語ページのURLを指定するためのカスタムフィールド(本記事では「cf_en_url」としています)を作ります。

カスタムフィールドを作成したら、以下のコードを有効化しているテーマのfunctions.phpへ追記します。

/**** マルチランゲージのヘッダー出力(主サイト) ****/
function hab_add_multi_lang_header_parent(){
//変数の設定
	global $wp_query;
	$postID = $wp_query->post->ID;
	$ha_mlang_customfield = get_post_meta($postID, 'cf_en_url', true);
	$ha_ima_url=(empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
//投稿・固定ページ以外
	if(!is_singular()){
		echo '<link rel="canonical" href="' .$ha_ima_url. '" />';	
//投稿・固定ページでcf_en_urlに入力がある場合
	}elseif($ha_mlang_customfield){
		echo '<link rel="alternate" href="' .$ha_mlang_customfield. '" hreflang="en" />';
		echo '<link rel="alternate" href="' .$ha_ima_url. '" hreflang="ja" />';
		echo '<link rel="canonical" href="' .$ha_ima_url. '" />';
//投稿・固定ページでcf_japanese_urlに入力がない場合
	}else{
		echo '<link rel="canonical" href="' .$ha_ima_url. '" />';	
	}
}
add_action('wp_head', 'hab_add_multi_lang_header_parent',1);

行っていることは英語サイト側とほぼ同じですが、カスタムフィールド側に値があってもCanonicalタグの出力URLは日本語ページのままという点が大きく異なります。

上のコードではPHP8.0で「PHP Warning: Attempt to read property “ID” on null in…」という警告が出ることがあります。PHP8.0の環境で使う場合には、少し複雑になりますが以下のコードを使用ください(結果は同じになります)。

/**** マルチランゲージのヘッダー出力(主サイト) ****/
function hab_add_multi_lang_header_parent(){
//フロントページ、アーカイブページ
if(!is_singular() || is_front_page()){
	$ha_ima_url=(empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];	
	echo '<link rel="canonical" href="' .$ha_ima_url. '" />';	
}

//固定ページでのフロントページを除くすべての投稿と固定ページ
if(is_singular() && !is_front_page()){
	//変数の設定
	global $post;
	$ha_mlang_customfield = get_post_meta($post->ID, 'cf_en_url', true);
	$ha_ima_url=(empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
	
if(empty($ha_mlang_customfield)){
//cf_japanese_urlに入力がない場合
	echo '<link rel="canonical" href="' .$ha_ima_url. '" />';	
}else{

//cf_en_urlに入力がある場合	
		echo '<link rel="alternate" href="' .$ha_mlang_customfield. '" hreflang="en" />';
		echo '<link rel="alternate" href="' .$ha_ima_url. '" hreflang="ja" />';
		echo '<link rel="canonical" href="' .$ha_ima_url. '" />';	
}
	}
}

add_action('wp_head', 'hab_add_multi_lang_header_parent',1);

ここまでで、マルチランゲージサイトに必要な要件を満たす機能を実装することができました。

記事にしてしまうと「なーーんだ、カスタムフィールド作ってテーマのfunctions.phpへ指示を書くだけね」と思われそうですが、コードはコピペでも構わないものの、大切なご自身のサイトで何をしているのかを理解するようにしてください。

日本語←→英語ページへ移動するボタンやリンクを作る

あとは、英語ページのある日本語ページに「英語ページがあるよ」、日本語ページのある英語ページに「日本語ページがあるよ」という双方の遷移ボタンを作れば完成!ということになります。

本当に個人的に素朴な疑問として、英語圏の人は英語ページしか見ないだろうし、日本語圏の人は日本語ページしか見ないと思うので不要なのかもとも思いましたが、一応設置することにしました。

こちらも「日本語サイト(主サイト)」と「英語サイト(副サイト)」それぞれに別の作業をしていきます。

副サイト(英語サイト)側の設定

以下のコードを有効化しているテーマのfunctions.phpへ追記します。

/***** 日本語ページへの遷移リンク *****/
function hab_parent_page_link(){
//変数の設定
	global $wp_query;
	$postID = $wp_query->post->ID;
	$ha_mlang_customfield = get_post_meta($postID, 'cf_japanese_url', true);
	if(!is_singular()){
	}elseif($ha_mlang_customfield){
		echo '<div class="lang-button"><a href="' .$ha_mlang_customfield. '" target="blank">日本語ページを見る</a></div>';	
	}	
}
add_shortcode('parent-link', 'hab_parent_page_link');

上記コードで行っているのは、個別ページ(投稿・固定ページ)で、カスタムフィールド(cf_japanese_url)に値がある場合には、カスタムフィールドに入っている値(日本語ページのURL)をリンクとして表示するショートコードを作りなさいというものです。

リンクは単純なテキストリンクになってしまいますので、以下のコードをテーマの「追加CSS」へ追記します。

/***** 言語変更ボタン(他言語ページ遷移ボタン) *****/
.lang-button {
    border: 2px solid #222;
    border-radius: 4px;
    text-align: center;
    padding: 4px;
	margin:8px;
}

.lang-button a {
    text-decoration: none;
    color: #222;
    font-size: 1.2em;
}

.lang-button a:hover {
    color: #777;
}

あとは、カスタムHTMLウィジェットへ以下のショートコードを挿入すれば完成です。

[parent-link]

主サイト(日本語サイト)側の設定

副サイト同様、有効化しているテーマのfunctions.phpへ以下を追記します。

/***** 英語ページへの遷移リンク *****/
function hab_child_page_link(){
//変数の設定
	global $wp_query;
	$postID = $wp_query->post->ID;
	$ha_mlang_customfield = get_post_meta($postID, 'cf_en_url', true);
	if(!is_singular()){
	}elseif($ha_mlang_customfield){
		echo '<div class="lang-button"><a href="' .$ha_mlang_customfield. '" target="blank">View English Page</a></div>';	
	}	
}
add_shortcode('child-link', 'hab_child_page_link');

また同様にテーマの「追加CSS」へ以下を追記します。

/***** 言語変更ボタン(他言語ページ遷移ボタン) *****/
.lang-button {
    border: 2px solid #222;
    border-radius: 4px;
    text-align: center;
    padding: 4px;
	margin:8px;
}

.lang-button a {
    text-decoration: none;
    color: #222;
    font-size: 1.2em;
}

.lang-button a:hover {
    color: #777;
}

また、同様に以下のショートコードをカスタムHTMLウィジェットへ挿入します。

[child-link]

これで「日本語ページ」→「英語ページ」、「英語ページ」→「日本語ページ」へのリンクボタンができました。

多言語ページとして認識されているかの確認方法

多言語にしたページがきちんと認識されているかを確認するには、Google Search Consoleの管理画面左側のメニューから「以前のツールとレポート」を開き、「インターナショナルターゲティング」をクリックして出てくる画面で確認します。

Googleに多言語ページの存在を認識されるタイミングは、多言語ページの設定を行ってから次回検索エンジンクローラーが訪問した後となりますので、サイトによっては結構時間がかかるかも知れません。

ちなみに当サイトも2021年5月21日に作成完了し、ひとまず2記事(この記事含め3記事)を公開した段階ですので、2021年5月22日の段階では、まだマルチランゲージページとは認識されていません(まあ1日でっていうのはないかと思います)。経過については、気が向いたら(そういえば・・と気づいたら)このページに追記しようと思っています。

2021524追記

Google Search Consoleで確認したところ、きちんとhreflang(言語設定あり)と認識されていました。サイトによるとは思いますが、案外早く認識されるんですね。

おまけ 管理画面に双方の言語ページのリンクを表示する

ここまでで多言語化(今回は英語版の作成)ができました。ここではもう少し使い勝手がよくなるように、日本語サイトで英語ページのあるコンテンツは投稿一覧(管理画面側)へ英語ページへのリンクを、英語サイトで日本語ページのあるコンテンツは投稿一覧(管理画面側)へ日本語ページへのリンクをそれぞれ表示するようにする方法を紹介しておきます。

これを行っておくことで、いちいち双方のページを探す必要もなくなり、相互関係のないページにはリンクが表示されないので一目瞭然となり、すごく便利になります。

以下のコードを主・副それぞれのサイトで有効化しているテーマのfunctions.phpへ追記すればすぐに実装できます。

日本語サイト側のカスタムフィールドが「cf_en_url」、英語サイト側のカスタムフィールドが「cf_japanese_url」である場合(本記事の手順通りにした場合)のコードです。カスタムフィールド名が異なる場合は変更してください。

主サイト(日本語サイト)側のfunctions.phpへ追加するコード

/*** 英語ページのURLをリンク付きで投稿一覧画面へ表示 *******/
function hab_manage_posts_columns_enurl($columns) {
$columns['cf_en_url'] = "英語ページ";	

return $columns;
}

function hab_add_column_enurl($column_name, $post_id) {
	/*日本語サイトのURL呼び出し*/
	if( $column_name == 'cf_en_url' ) {
		$stitle = get_post_meta($post_id, 'cf_en_url', true);
	}

	if ( isset($stitle) && $stitle ) {
		echo '<a href="' .esc_attr($stitle). '" target="blank">英語ページを開く</a>';
	} else {
		echo __('');
	}
}
add_filter( 'manage_posts_columns', 'hab_manage_posts_columns_enurl' );
add_action( 'manage_posts_custom_column', 'hab_add_column_enurl', 10, 2 );

副サイト(英語サイト)側のfunctions.phpへ追加するコード

/*** 日本語ページのURLをリンク付きで投稿一覧画面へ表示 *******/
function hab_manage_posts_columns_jpurl($columns) {
$columns['cf_japanese_url'] = "日本語ページ";	

return $columns;
}

function hab_add_column_jpurl($column_name, $post_id) {
	/*日本語サイトのURL呼び出し*/
	if( $column_name == 'cf_japanese_url' ) {
		$stitle = get_post_meta($post_id, 'cf_japanese_url', true);
	}

	if ( isset($stitle) && $stitle ) {
		echo '<a href="' .esc_attr($stitle). '" target="blank">日本語ページを開く</a>';
	} else {
		echo __('');
	}
}
add_filter( 'manage_posts_columns', 'hab_manage_posts_columns_jpurl' );
add_action( 'manage_posts_custom_column', 'hab_add_column_jpurl', 10, 2 );

コードを簡単に説明すると、各コードの上半分に、投稿一覧画面(管理画面側)に列を追加するというユーザー定義関数を、下半分に、列に該当するカスタムフィールドをリンクとして出力しなさいというユーザー定義関数を作り、前者をフィルターフックで、後者をアクションフックで呼び出しています。

今回の場合に限らず、カスタムフィールドの値を管理画面の一覧へ出力したい場合には流用できますので、1つパターンを覚えておくといいでしょう。

後述 同一サイト内ならプラグインの方が楽かも・・

ここまで読んでいただいて恐縮ですが、今稼働しているサイトを単純に多言語化するなら、検索すると出てくる有名なプラグインたちで機能追加した方が圧倒的に簡単かも知れません。

別にサイトを作って、設定して、英語記事作って・・というのは大変な作業ですから・・。

ただ、プラグインというのは世界中すべてのWordPressサイトで問題なく稼働するものではありませんので、導入直後にトラブル発生となることもありますし、以下のような場合にどうすればいいのかという確認も必要ですから、特にマルチランゲージ(多言語化)については慎重に行った方がいいと思います。安全に行くならテストサイトやまだ駆け出しのサイトでじっくり煮詰めてから行った方が無難でしょう。

  • 導入した後不要となった場合の離脱(元に戻す)方法は?簡単に戻せるか?
  • カスタム投稿タイプを使っている場合に稼働しなかったらどうする?
  • 機能追加により、サイトのパフォーマンス低下が起こったらどう対処する?
  • プラグイン作者に不測の事態が発生するなどして将来バージョンへの対応が不可となった場合にどうするか?

今回紹介したのは、別のWordPressをサブディレクトリへ作成して、独立したサイト同士をつなげるという方法ですので、上記の項目について問題はほぼ発生しません(しいて言えば別のサイトが稼働することで、サーバー負荷が増えるかもということでしょうか・・)。

特に離脱したい場合は設定したものを元に(functions.phpやCSSを削除し、Canonicalタグの出力を元に戻す)戻し、副サイトとして作った英語サイトを削除すれば終了!ですから、プラグインのように主サイトへ不要な情報が残ってしまう心配も少なく済みます(カスタムフィールドの値については「Delete Custom Fields」などを使って削除すれば、何もなかった状態に戻せます)。

参考にさせていただいたページ

本記事と本記事の機能を作成するにあたり、以下のページを参考にさせていただきました。

更新日更新内容
2021年 5月22日【WordPress】プラグインなしで「英語」版のサイトを作る -制作備忘録-を公開しました
2021年 5月25日管理画面の投稿一覧へ主・副サイトそれぞれの記事リンクを表示する方法を追加しました
2021年 7月 5日紹介コードにPHP8.0で警告ログが吐き出されないようにする代替コードを追加しました