Cocoonのnoindex制御を拡張する方法

Cocoonカスタマイズ集
この記事は約3分で読めます。
記事内に広告が含まれています。

はじめに

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コメント

get_{$meta_type}_metadataフィルターを使用することで、取得されたカスタムフィールド値を動的に差し替えることができます。

実装例

前述の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 標準フックを利用した汎用的なカスタムフィールド制御が可能になります。
テーマやプラグインの内部処理を理解し、どの段階で値が取得・操作されているのかを意識することで、より柔軟で再利用性の高いカスタマイズを行うことができます。

タイトルとURLをコピーしました