はじめに
Cocoonには、noindex判定を行うための独自フックが用意されており、その仕組みについては公式サイトでも解説されています。
一方で、WordPress 本体にも、カスタムフィールドの取得処理そのものに介入できる標準フックが存在します。
これを利用することで、テーマ固有のフックに依存せず、条件に応じてカスタムフィールドの値を制御することが可能です。
この記事では、Cocoonのnoindex制御を例に、WordPress 標準フックを使って、条件に応じてカスタムフィールドの値を制御する方法を解説します。
実装手順
Cocoon独自フックを用いる場合
Cocoonでは、投稿や固定ページのnoindex設定をthe_page_noindexというカスタムフィールドを通じて管理しています。
この値が1の場合、meta robotsにnoindexが出力され、検索エンジンにインデックスされないページとして扱われます。
このnoindex判定を行うために、Cocoonにはis_noindex_pageというフィルターフックが用意されています。
実装例
以下に、カテゴリーID=1に属する投稿をnoindexに設定するコード例を示します。
add_filter('is_noindex_page', function ($is_noindex) {
return $is_noindex || (is_singular('post') && has_category(1));
});
get_{$meta_type}_metadataを用いる場合
WordPressには、メタデータ取得時に必ず通過するget_{$meta_type}_metadataという標準フィルターフックがあります。
このフックは、get_post_meta()などの関数内部で実行され、データベースから取得されるメタデータの値を確定する直前に介入できます。
| meta_type | 対象 |
|---|---|
| post | 投稿・固定ページ |
| term | ターム(カテゴリー・タグなど) |
| user | ユーザー |
| comment | コメント |
実装例
前述のCocoon独自フックによるnoindex制御を、WordPress標準フックを用いて実装したコード例を以下に示します。
add_filter('get_post_metadata', function ($value, $post_id, $meta_key, $single) {
if ($meta_key === 'the_page_noindex' && get_post_type($post_id) === 'post' && has_category(1, $post_id)) {
return $single ? '1' : ['1'];
}
return $value;
}, 10, 4);
さいごに
今回紹介した方法を使えば、Cocoon独自フックに依存せず、WordPress 標準フックを利用した汎用的なカスタムフィールド制御が可能になります。
テーマやプラグインの内部処理を理解し、どの段階で値が取得・操作されているのかを意識することで、より柔軟で再利用性の高いカスタマイズを行うことができます。


