WordPressテーマSANGOの質問

記事中広告を特定のh2タグ前に表示したい

アバター
うい

いつもお世話になっております。
「記事中広告」について質問させてください。

ウィジェットの「記事中広告」では、デフォルトで” 1番最初のh2見出し前 “に表示されるようになっていますが、1番目には挿入せず2番目以降のh2見出し前に表示するよう、PHPファイル修正などで指定はできるでしょうか。
(例:2~4番目のh2見出し前に表示)
他サイトのカスタマイズ記事等も拝見したのですが、1番目を表示させない方法は載っておらず、サルワカさまへお尋ねしたいと思った次第です。

お忙しいなか恐れ入りますが、ご教示のほどお願いいたします。

ウィジェットの設定をする
ウィジェットの設定をしよう:広告の貼り方も解説
コメントへの回答
サルワカくん
サルワカくん
2019/12/10

お世話になっております。
以下のようなコードを子テーマのfunctions.phpに追加すると、記事中広告の挿入位置を変えられるかと思います。

// 記事中広告:テーマ本体の読み込みを解除
add_action( 'after_setup_theme', function() {
  remove_filter('the_content', 'ads_before_headline');
});
// 記事中広告:新しく定義
add_filter('the_content', 'my_ads_before_headline');
function my_ads_before_headline($the_content) {
  global $post;
  if (!is_single()) return $the_content;
  if (!is_active_sidebar('ads_in_contents')) return $the_content;
  if (get_post_meta($post->ID, 'disable_ads', true)) return $the_content;

  if (!defined('H2REGEX')) define('H2REGEX', '/^<h2.*?>.*?<\/h2>$/im');

  // ウィジェットを$adに格納
  ob_start();
  dynamic_sidebar('ads_in_contents');
  $ad = ob_get_contents();
  ob_end_clean();

  preg_match_all(H2REGEX, $the_content, $matches);
  if ( isset($matches[0])) {
    // 2番目のh2前に表示
    if(isset($matches[0][1])) {
      $the_content  = str_replace($matches[0][1], $ad.$matches[0][1], $the_content);
    }
    // 3番目のh2前に表示
    if(isset($matches[0][2])) {
      $the_content  = str_replace($matches[0][2], $ad.$matches[0][2], $the_content);
    }
    // 4番目のh2前に表示
    if(isset($matches[0][3])) {
      $the_content  = str_replace($matches[0][3], $ad.$matches[0][3], $the_content);
    }
  }
  return $the_content;
}

この例では、2、3、4番目のh2見出しの前に広告が挿入されるようになっているかと思います。
よろしくお願いします。

アバター
うい
2019/12/11

迅速なご回答ありがとうございます。

反映できました。大変助かりました!
ありがとうございました。