2016-05-10 8 views
1

私は第7段落の追加を表示するために自分のウェブサイトの設定を持っています。すべての投稿が他の投稿と同じ長さであるわけではないので、これは奇妙な広告配置を引き起こす可能性があります。段落の数に基づいて中心にアドコードを追加する

代わりに、私は次のロジックを使用したいと思います。その後、

If number_of_paragraphs => 14paragraph_insert_id= number_of_paragraphs/2Else nothing

//adding mid post add based on paragraph 
add_filter('the_content', 'prefix_insert_post_ads_mid'); 

function prefix_insert_post_ads_mid($content) { 

    $ad_code = '<div id="adsensemid">code goes here</div>'; 

    if (is_single() && ! is_admin()) { 
     return prefix_insert_after_paragraph($ad_code, $content); 
    } 

    return $content; 
} 


function prefix_insert_after_paragraph($insertion, $content) { 
    $closing_p = '</p>'; 
    $paragraphs = explode($closing_p, $content); 
    // floor or ceil; to make it round 
    $mid = ceil(length($paragraphs)/2); 
    foreach ($paragraphs as $index => $paragraph) { 

     if (trim($paragraph)) { 
      $paragraphs[$index] .= $closing_p; 
     } 

     if ($mid == $index + 1) { 
      $paragraphs[$index] .= $insertion; 
     } 
    } 

    return implode('', $paragraphs); 
} 

残念ながら、私の最初の変更はすでにスクリプトを壊しました。ウェブサイトに適用すると、すべてのコンテンツは空白になります。欠陥を見つけることができる人はいますか?どんな助けでも大いに感謝されるでしょう!

psの現在の作業スクリプトは:

//adding mid post add based on paragraph 
add_filter('the_content', 'prefix_insert_post_ads_mid'); 

function prefix_insert_post_ads_mid($content) { 

    $ad_code = '<div id="adsensemid></div>'; 

    if (is_single() && ! is_admin()) { 
     return prefix_insert_after_paragraph($ad_code, 7, $content); 
    } 

    return $content; 
} 


function prefix_insert_after_paragraph($insertion, $paragraph_id, $content) { 
    $closing_p = '</p>'; 
    $paragraphs = explode($closing_p, $content); 
    foreach ($paragraphs as $index => $paragraph) { 

     if (trim($paragraph)) { 
      $paragraphs[$index] .= $closing_p; 
     } 

     if ($paragraph_id == $index + 1) { 
      $paragraphs[$index] .= $insertion; 
     } 
    } 

    return implode('', $paragraphs); 
} 

答えて

0

私は、問題を特定しています。コードは完全に機能しています。

$mid = ceil(count($paragraphs)/2); 

完全なコード例:

//adding mid post add based on paragraph 
add_filter('the_content', 'prefix_insert_post_ads_mid'); 

function prefix_insert_post_ads_mid($content) { 

    $ad_code = '<div id="adsensemid">code goes here</div>'; 

    if (is_single() && ! is_admin()) { 
     return prefix_insert_after_paragraph($ad_code, $content); 
    } 

    return $content; 
} 


function prefix_insert_after_paragraph($insertion, $content) { 
    $closing_p = '</p>'; 
    $paragraphs = explode($closing_p, $content); 
    // floor or ceil; to make it round 
    $mid = ceil(count($paragraphs)/2); 
    foreach ($paragraphs as $index => $paragraph) { 

     if (trim($paragraph)) { 
      $paragraphs[$index] .= $closing_p; 
     } 

     if ($mid == $index + 1) { 
      $paragraphs[$index] .= $insertion; 
     } 
    } 

    return implode('', $paragraphs); 
} 

私はそれが設計だに欠陥が発生しました。 pagebreaks(nextpageタグ)を使用すると、このスクリプトはコンテンツ全体をカウントします。それで、2ページ、それぞれに4つの段落を持つ投稿があるとしましょう。スクリプトは8を数え、4段落の後にそれ自身をスローします。記事は分割されているため、中央にはなりません。代わりに、2つのページのそれぞれの最後の段落になります。

だから、今のところ、私は 段落< 14何が(上記のコードのように)真の真ん中を見つけていない、次の条件 段落< = 8ディスプレイに元のコードを変更した他 は、第7段落

function prefix_insert_after_paragraph($insertion, $paragraph_id, $content) { 
    $closing_p = '</p>'; 
    $paragraphs = explode($closing_p, $content); 
    $number_of_paragraphs = ceil(count($paragraphs)); 
    if ($number_of_paragraphs <= 8) { 
     //too small to display middle add 
     $insertion = ''; 
    } elseif ($number_of_paragraphs <= 14){ 
    //too short for 7th paragraph, find true center 
    $mid = ceil(count($paragraphs)/2); 
    $paragraph_id = $mid ; 
    } 

    foreach ($paragraphs as $index => $paragraph) { 

     if (trim($paragraph)) { 
      $paragraphs[$index] .= $closing_p; 
     } 

     if ($paragraph_id == $index + 1) { 
      $paragraphs[$index] .= $insertion; 
     } 
    } 

    return implode('', $paragraphs); 
} 

を使用しますもし誰かが複数のページに分かれている真のセンターの中心を見つける解決法を持っているなら(私は最大8つのページブレークを持っています!)、私に知らせてください。

関連する問題