WordPressには、インストールするだけで使える多機能なプラグインや、プラグインを必要としない多機能なテーマがたくさんあります。
代表的なのがSEOプラグインで、タイトル・キーワード・ディスクリプションを設定することができたり、SNS用にタイトルやディスクリプションを別に設定することが可能です。
ただ、そういった多機能で便利なプラグインやテーマを使っていると不安なのが、停止(削除)がしづらい…というか、実質的に「できない」こと。
色やレイアウトなどの全体設定であれば支障はありませんが、記事毎に設定していた値に関しては、自分で取得・出力しなければ、これまでの設定値がすべて消えてしまうからです。
では、そういったプラグインやテーマの停止(削除)や変更ができないのかというと、そういうわけではありません。
そういった設定値は基本的に「カスタムフィールド」としてWordPressのデータベースに保存されているので、プラグインやテーマがなくても扱うことができるからです。
カスタムフィールドとは?
WordPressのカスタムフィールドとは、簡単に言うと、記事毎に紐付けられている情報のことです。
その情報は「名前」と「値」という組み合わせになっていて、例えば、「評価」という名前に対して、「良かった」という値をセットする…のように扱います。
先述の通り、このカスタムフィールドはデータベースに保存されていて、保存先(テーブル)はwp_postmetaです。(メタデータとして保存されていてカスタムフィールドとして使われるというのが正しい表現ですが)
参考データベース構造
プラグインやテーマを削除しても設定値は削除されない
つまり、記事毎に設定された値は、プラグインでもテーマでもなく、WordPressのデータベース(wp_postmeta)に保存されるので、そのプラグインやテーマがなくても設定値を取得・出力できます。
実は、僕自身この仕組みを詳しく知らなかったんですが、テーマ内にSEO対策機能を実装した時になんとなく仕組みがわかり 、All in One SEO Packの設定値を取得できた時に、ようやく腹に落ちました。
カスタムフィールドの設定値を取得・出力する方法
本題に入りますが、どれだけ多機能なプラグインやテーマでも、記事毎に情報を保存できるのはカスタムフィールド(メタデータ)を使っているからなので、取得・出力も同じやり方でできるはずです。
つまり、保存された情報は「名前」と「値」がセットになっているので、「名前」がわかれば「値」が取得できるわけです。
先ほどの「評価」という名前に「良かった」という値をセットする例えを引き合いに出すと、「評価の値を取得して」という指示を出せばいいわけですね。
その方法はいくつかありますが、僕がおすすめするのはget_post_custom()
です。これが1番扱いやすいと思います。
基本的な形はこちら。
get_post_custom()['名前'][配列の順番]
get_post_custom関数の後に、名前と配列の順番を指定することで、配列に格納されている値が取得することができます。
値がセットされているかどうかなので、配列の順番は基本的に1番最初の「0」になり、名前は別途調べる必要があります。
取得サンプルコード
例えば、All in One SEO Packのディスクリプションの値は下記のコードで取得できます。
get_post_custom()['_aioseop_description'][0]
出力サンプルコード
出力は単純にechoすればOKです。もちろん、変数に入れてもOKです。
<?php echo get_post_custom()['_aioseop_description'][0]; ?>
カスタムフィールドの「名前」を調べる方法
その肝心の名前は、有名なプラグインやテーマは別として、基本的には自力で探す必要があります。
「get_post_meta」で検索
簡単なのは、「get_post_meta」で検索することです。
やり方は、「get_post_meta」で検索し、シングルクォーテーション(もしくはダブルクォーテーション)で囲まれた文字列を探すだけ。それがおそらくカスタムフィールドの「名前」です。
get_post_meta( 〇〇, '名前', true )
試しに、All in One SEO Packのフォルダも検索してみましたが、
get_post_meta( $post->ID, ‘_aioseop_title’, true )
のようにたくさんヒットしたので、WordPressオリジナルテーマでも、オリジナルプラグインでも同じやり方で大丈夫だと思います。
データベース「wp_postmeta」を検索
上記の方法で探せない場合、WordPressデータベースにある「wp_postmeta」の中を検索すれば確実に見つかります。(カスタムフィールドの名前と値はwp_postmetaに保存されるため)
ただ、ちょっと工夫が必要で、検索するための文字列をある程度把握する必要があります。
例えば、All in One SEO Packで設定したnoindexとnofollowの値は上記の方法で探せないんですが、「noindex」や「nofollow」、「aioseop」という文字列がカスタムフィールドの名前に使われていることは予想できます。
そこで、検索文字列にその文字列を入力し、wp_postmetaテーブルを検索すると、
このようにヒットするので、「表示」をクリック。
すると、名前と値が確認できます。今回のケースでは、名前が「_aioseop_noindex」、値が「on」になります。
値にアクセスするには、同じくget_post_custom関数を使えばOKです。
サンプルコード
get_post_custom()['_aioseop_noindex'][0]
まとめ
プラグインはもちろんのこと、僕が自作しているWordPressテーマ「4536」のように、テーマのオリジナル機能で情報を保存している場合も、今回ご紹介した方法で簡単に引き継ぐことができます。
仕事でWordPressサイトのリニューアルを請け負う時なんかにも使える方法だと思うので、ぜひ活用していただければ嬉しいです。
以上、ご参考までに!(`・ω・´)ゞ