下から1番目のh2タグ上に広告

Simplicityの特徴 › フォーラム › Simplicityについての質問 › 下から1番目のh2タグ上に広告

  • このトピックには8件の返信、1人の参加者があり、最後にマグマグにより10年、 3ヶ月前に更新されました。
8件の返信スレッドを表示中
  • 投稿者
    投稿
    • #42011
      マグマグ
      ゲスト

      お世話になります。
      下から1番目のh2タグのすぐ上に広告を貼る方法を教えてください。
      記事によってh2タグの数がバラバラのため下から1番目に広告をはりたいです。

      寝ログサイトのhttp://nelog.jp/add-ads-before-h2をカスタマイズすれば出来る感じがします。
      私ではどこをどう編集すればいいのか分からないため、よろしくお願いします!

    • #42018
      Hidekichi
      ゲスト
      function add_ad_before_h2_for_3times($the_content) {
      //広告(AdSense)タグを記入
      $ad = <<< EOF
      <div style="color:red;">広告</div>
      EOF;
       
        if ( is_single() ) {//投稿ページ
          /*$h2 = '/^<h2.*?>.+?<\/h2>$/im';*/
          $h2 = "/<h2.*\/h2>/im";
          if ( preg_match_all( $h2, $the_content, $h2s )) {//H2見出しが本文中にあるかどうか
          $h2sCount = count($h2s[0]) - 2;
          $target = $h2s[0][$h2sCount];
            if ( $h2s[0] ) {//チェックは不要と思うけど一応
              if ( $target) {
                $the_content  = str_replace($target, $ad.$target, $the_content);
              }
            }
          }
        }
        return $the_content;
      }
      add_filter('the_content','add_ad_before_h2_for_3times');

      こんな感じですかね。ただしこの正規表現は完璧ではない感じがします。まぁ同じh2のテキストの見出しは無いだろうと思うので、これで概ね動作するかと。

    • #42134
      マグマグ
      ゲスト

      ありがとうございます。

      ただこれだだと下から2つ目のH2タグの前に表示されてしまいました。

      一番下のタグの手前に表示したいです。
      コードを書き換えました。
      $h2sCount = count($h2s[0]) – 2;
      ↓
      $h2sCount = count($h2s[0]) – 1;

      これで思い通りに表示されました。
      ここだけ編集するだけで大丈夫でしょうか?

    • #42135
      マグマグ
      ゲスト

      加えてモバイルとPC版で広告コードを分けたいです。
      if文をどこに入れるのかも教えていただけたらと思います。

      「投稿本文上」「投稿本文中」などの広告はヴィジェットから設定するためにそれらとは重複しないように一番下のH2タグ直前に広告を表示できたらと考えています。
      よろしくお願いいたします。

    • #42136
      Hidekichi
      ゲスト

      テストで投稿記事にh2ばっかり入力してたんで、思わず1を2と入れてしまっていたようです(笑)
      修正点はその部分だけです。

      が、僕がテストしてる時に遭遇した内容なんですけれども、

      <h2>見出しテスト h2</h2>
      <h2>見出しテスト h2</h2>
      <h2>見出しテスト h2</h2>
      <h2>見出しテスト h2 4</h2>
      <h2>見出しテスト h2</h2>

      こんな感じで。最初は4と入れたのが一番下だったんですよ。で、あ、イケたやんと思ってもしかして見出しが増えたらどうかと5つ目を入れたわけです。おそらくその時に1を2と入れなおしたように思います。変数に入れたのがその頃だったので。

      その後、気づかずもっと増えたらどうだろうと上記h2のリストをコピペしたわけです。

      <h2>見出しテスト h2</h2>
      <h2>見出しテスト h2</h2>
      <h2>見出しテスト h2</h2>
      <h2>見出しテスト h2 4</h2>
      <h2>見出しテスト h2</h2>
      <h2>見出しテスト h2</h2>
      <h2>見出しテスト h2</h2>
      <h2>見出しテスト h2</h2>
      <h2>見出しテスト h2 4</h2>
      <h2>見出しテスト h2</h2>

      こういう感じに。そしたら、広告は、

      <h2>見出しテスト h2</h2>
      <h2>見出しテスト h2</h2>
      <h2>見出しテスト h2</h2>
      広告
      <h2>見出しテスト h2 4</h2>
      <h2>見出しテスト h2</h2>
      <h2>見出しテスト h2</h2>
      <h2>見出しテスト h2</h2>
      <h2>見出しテスト h2</h2>
      広告
      <h2>見出しテスト h2 4</h2>
      <h2>見出しテスト h2</h2>

      確か記憶ではこんな感じに出たように思います。

      そもそもこんなタイトルをつけることはないと思うので問題ないはずですけれども、もしかして同じようなタイトルがついた場合は広告が思わぬ所に出るかも知れません。確率的にはかなり低いと思いますけれども。なのでそのあたりは薄ーく注意しておいて下さい。
      まぁh2とかを何個もタイトルに入れるようなことなんてまずないですけどね(笑)

    • #42218
      マグマグ
      ゲスト

      こんばんは。
      #42135の問いにも答えていただけたら嬉しいです。

      試してみたら真っ白になってしまったためコードをお願い致します。

    • #42226
      Hidekichi
      ゲスト

      モバイルでも同じ位置に入れるのであれば、

      if ( is_single() ) {//投稿ページ
      
      // ↓
      
      if ( is_single() || is_mobile() ) {

      と条件を入れてみたり、広告を変更するのであれば、別途

      $ad = <<< EOF
      <div style="color:red;">広告</div>
      EOF;
      
      // ↓
      
      $ad2 = <<< EOF
      <div style="color:red;">広告2</div>
      EOF;

      と増やしてから、

      if ( $target && is_mobile() ) {
        $the_content  = str_replace($target, $ad2.$target, $the_content);
      } else {
        $the_content  = str_replace($target, $ad.$target, $the_content);
      }

      こういう条件を入れたらどうでしょうか?

      $target && is_mobile() は、$targetがあって(true)で、モバイルの時と言う条件です。モバイルでない時はelseの中が動作します。
      str_replaceは文字の書き換えをします。h2の部分を広告コード+h2とするわけです。

      > 「投稿本文上」「投稿本文中」などの広告はヴィジェットから
      > 設定するためにそれらとは重複しないように
      > 一番下のH2タグ直前に広告を表示できたらと考えています。

      これを実現するためには必ず、h2の数を考慮して下さい。h2がいくつになるかわからない(多く増える分には問題なし)場合は、ウィジェットを利用せず、それぞれの位置設定をこれらスクリプトでやる方が良いかと思います。

      count($h2s[0])は位置を調べるためにやってますが、ここにはh2の数が入ります。
      例えば広告を3箇所に入れたいと思っていて、h2がふたつしかない場合は、count($h2s[0])を調べて、

      if ( count($h2s[0]) < 3 ) {
        // h2が3つ以下の時
        // 広告を1つだけ入れるなどの処理
      } elseif {
        // 3つの時
        // 広告を2つ入れる処理
      } else {
        //3つ以上の時
        //通常の処理
      }

      などと変化をつける必要もあるかも知れません。

    • #42227
      Hidekichi
      ゲスト

      × elseif {
      ◯ elseif ( count($h2s[0]) == 3 ){

    • #42422
      マグマグ
      ゲスト

      おかげさまで思い通りに配置できました。
      ありがとうございました!!

8件の返信スレッドを表示中
  • トピック「下から1番目のh2タグ上に広告」には新しい返信をつけることはできません。
スポンサーリンク
アドセンス(大)
アドセンス(大)