SANGOテーマでタグに付くnoindex解除の方法【公式の修正版】

先に答えを知りたい人は、以下のコードをコピーしてSANGOの子テーマのfunctions.php内貼り付ければ解除できます。

// デフォルトのmeta robotsタグの除去
function remove_parent_theme_hook(){
  remove_action('wp_head','sng_meta_robots', 10);
}
add_action('after_setup_theme','remove_parent_theme_hook');

// デフォルトのコードをカスタマイズ
function my_meta_robots() {
  global $post;
  $rogots_tags = '';

  if (is_attachment()) {//メディアページの場合

    $rogots_tags = 'noindex,nofollow';

  } elseif (is_page() || is_single()) { //記事・固定ページの場合

    $robots_r  = get_post_meta( $post->ID, "noindex_options", true );
    if( is_array($robots_r) ) {
      $rogots_tags = ( in_array('noindex', $robots_r) && !in_array('nofollow', $robots_r)) ? 'noindex,follow' : implode( ",", $robots_r);
    }

  } elseif(is_paged() || is_date()){ //トップやアーカイブの2ページ目以降はindexせず、followだけ。

    $rogots_tags = 'noindex,follow';

  } elseif(is_search()){ //検索結果はインデックスしない

    $rogots_tags = 'noindex,nofollow';

  } elseif(is_category()){ //カテゴリーページ
    //初期設定ではインデックス。下記のコメントアウトを外すとnoindexに
    //$rogots_tags = 'noindex,follow';
  }
  elseif(is_tag()) {
    // 下記のコメントアウトを外すと再度noindexに
    //$rogots_tags = 'noindex,follow';
  }

  if($rogots_tags) {
    echo '<meta name="robots" content="'.$rogots_tags.'" />'."\n";//出力
  }
}
add_action( 'wp_head', 'my_meta_robots' ,10);

以下説明。

WordPressでメジャーなブログテーマであるSANGOでは、自動でタグページにnoindexが付くようになっている。

そしてこのタグがつかないようにするために、公式サイトでも子テーマに追加するコードが書かれている。

タグページにnoindexがつかないようにしたい

しかし、このコードを貼り付けてもnoindexが解除されない

なぜならWordPressが子テーマのfunctions.phpの方を先に読み込み、親テーマのfunctions.phpを後に読み込むから。

つまり子テーマのfunctions.phpで親テーマのfunctions.phpのコードを上書きしようとしても、ファイルの読み込み順序が子テーマの方が先なため上書きできない。

そもそも読み込まれる順序が逆だからである。

親テーマでフックに登録された関数を消すためには、’after_setup_theme’アクションフックで、親テーマの読み込みが終わってから実行されるようにする必要がある。

またコード3行目のremove_action関数の引数を「10」にしないと解除できないため要注意

※引数とはremove_action(‘wp_head’,’sng_meta_robots’, 10);の、最後についてる数値のことです

この引数はフックの優先順位を指定するもので、優先度の数が小さいほど先に実行され、大きいほど後に実行される。

初期値はどのフックも「10」なのだが、優先度を同じにしないと解除できない。

本来であればSANGO公式サイトに連絡するのがいいのかもしれないが、その時間が取れず。(この記事は書いてるけど…w)

誰か優しい方はSANGO公式に連絡してあげてください。